【发布时间】:2013-10-12 23:19:00
【问题描述】:
我很难理解为什么这个 Matlab 代码在不使用 LU 分解进行旋转的情况下执行高斯消除需要(2/3) * n^3 flops。 (FLOPs:浮点运算和not FLOPS:每秒浮点运算)
function x = GaussianElimination(A,b)
n = length(b);
for k = 1:n-1
for i = k+1:n
mult = A(i,k)/A(k,k);
A(i,k+1:n) = A(i,k+1:n)-mult*A(k,k+1:n);
b(i) = b(i) - mult*b(k);
end
end
x = zeros(n,1);
x(n) = b(n)/A(n,n);
for k = n-1:-1:1
x(k) = (b(k) - A(k,k+1:n)*x(k+1:n))/A(k,k);
end
end
如果有人能向我解释从 k+1 开始的嵌套循环如何计算失败次数,我将不胜感激。
PS:这里我不是在谈论算法复杂度。
【问题讨论】:
-
你说的是算法复杂度吗?我对“flops”一词的理解是“Floating point Operations Per Second”的首字母缩写词,通常用megaflops、gigaflops、teraflops等表示。但在这里你似乎在询问算法的复杂性我从未见过用“翻牌”表达。 ???
-
不,触发器 = 浮点运算。这就是为什么它让我感到困惑,因为它与算法复杂度不同。
-
很明显,计算机科学指令已经过去了,我的知识不再有用。祝你好运。
-
经过一些额外的搜索,结果发现 FLOPs 和 FLOPS 是两个不同的首字母缩写词,所以我更新了我的问题。
-
是的,FLOPS 是浮点运算的次数。请参阅 MathWorks 创始人 Cleve Moler 的 this old post 底部。在 JIT 加速下,今天所说的更加真实。问题是您是否要计算计算机执行的真实失败次数,或人类手动执行算法(如高斯消元法)所使用的次数
标签: matlab time-complexity linear-algebra linear-equation flops