performance - 使用更少的循环进行 LU 分解

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

最佳答案

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

如果你的老师碰巧是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/

相关文章:

python - Numpy 根据列表折叠列

performance - Postgres - 没有实际更新,它有副作用吗?

javascript - 重复的 gsap 动画代码和服务器加载时间

c++ - fftshift/ifftshift C/C++ 源代码

regex - 在Matlab中以最通用的方式从char数组中提取数值数组

python - 如何向量化这个矩阵运算?

sql - 使用交叉应用子查询优化sql查询时出现问题

performance - 最大化数组中成对距离的总和

c - 为什么matlab使用mex内存不足

r - 向量化 R 中的双重求和