是否可以通过优化放置括号来加速大型稀疏矩阵计算?
我要问的是:我可以通过强制 Matlab 以指定的顺序(例如“从右到左”或类似的顺序)执行操作来加速以下代码吗?
我有一个稀疏方形对称矩阵 H,它之前已被分解,以及一个长度等于 H 维数的稀疏向量 M。我想要做的是以下内容:
编辑:一些附加信息:H 通常为 4000x4000。z 和 c 的计算大约进行了 4000 次,而 dVa 和 dVaComp 的计算每 4000 次循环进行 10 次,因此总共进行了 40000 次。(迭代求解 dVa 和 dVaComp,更新 P_mis)。
在这里M*c*M'
,将变成一个有 4 个非零元素的稀疏矩阵。在 Matlab 中:
[L U P] = lu(H); % H is sparse (thus also L, U and P)
% for i = 1:4000 % Just to illustrate
M = sparse([bf bt],1,[1 -1],n,1); % Sparse vector with two non-zero elements in bt and bf
z = -M'*(U \ (L \ (P * M))); % M^t*H^-1*M = a scalar
c = (1/dyp + z)^-1; % dyp is a scalar
% while (iterations < 10 && ~=converged)
dVa = - (U \ (L \ (P * P_mis)));
dVaComp = (U \ (L \ (P * M * c * M' * dVa)));
% Update P_mis etc.
% end while
% end for
并且记录在案:即使我多次使用 H 的倒数,预计算它也并不快。
谢谢 =)