使用较少的循环进行LU分解

时间:2015-11-11 14:53:29

标签: performance matlab vectorization matrix-decomposition

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循环?

1 个答案:

答案 0 :(得分:2)

有两种方法可以移除内循环。

如果您的老师恰好是http://plnkr.co/edit/SGhOSx?p=preview -

<input name="first_input"  type="text"  mydir-mod="compare"  mydir-main ng-model="hi"/>

否则,

A(k+1:n,:) = A(k+1:n,:) - bsxfun(@times,L(k+1:n,k),A(k,:))