Matlab中有多种计算“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
来计算 LU 分解。他说,你可以在不使用 for
的情况下找到所需的索引,然后通过一些技巧,你就根本不需要使用 for
了。
我的第一个问题是:使用for
真的会降低程序的速度吗?我的第二个问题是:如何将所需的索引存储在数组中并使用它们而不是 for
循环?
最佳答案
有两种方法可以删除内循环。
如果你的老师碰巧是bsxfun-lover
-
A(k+1:n,:) = A(k+1:n,:) - bsxfun(@times,L(k+1:n,k),A(k,:))
否则,
A(k+1:n,:) = A(k+1:n,:) - L(k+1:n,k)*A(k,:)
关于performance - 使用更少的循环进行 LU 分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33653153/