Matlab中有幾種方法可以計算「LU分解」。這裏是一個:使用較少的循環進行LU分解
function [L,A]=LU_factor(A,n)
L=eye(n);
for k=1:n
if (A(k,k) == 0) Error('Pivoting is needed!'); end
L(k+1:n,k)=A(k+1:n,k)/A(k,k);
for j=k+1:n
A(j,:)=A(j,:)-L(j,k)*A(k,:);
end
end
但我的老師告訴我們,在MATLAB使用for
可以降低程序的效率。他告訴我們使用更少的for
s來計算LU分解。他說,你可以在不使用for
的情況下找到所需的索引,然後根據一些技巧,根本不需要使用for
。
我的第一個問題是:會不會使用for
真的降低程序的速度?我的第二個問題是:如何將所需的索引存儲在數組中並使用它們代替for
循環?
有一個函數[魯](http://uk.mathworks.com/help/matlab/ ref/lu.html)這可能是在matlab中進行分解的最有效的方法:) – nivag
'for'循環在MATLAB中過去效率非常低,並且因爲這個原因,有很多遺留的厭惡。這些日子,他們實際上是更有效率(感謝JIT編譯器)提供您預先分配您的矩陣。有時循環甚至可以超越矢量化解決方案。但通常他們還是比較慢。唯一真正知道的方法是使用像'timeit'這樣的函數來自己寫出和計算它們。 – Dan
我認爲這裏的for循環非常好。 執行lu分解的快速方法是'lu'命令,並且無法在MATLAB代碼中更快地寫入內容。 編寫自己的'lu'函數的速度無法達到速度。這一點必須是建立概念理解和實踐。在MATLAB以外的編碼中,for循環非常好。模糊的,複雜的代碼來避免循環只是MATLAB特有的怪異,它不是一些普遍的技巧。 –