括弧を最適に配置するなどして、大規模な疎行列の計算を高速化することは可能ですか?
私が求めているのは、Matlab に指定された順序 (たとえば、「右から左」など) で操作を実行させることで、次のコードを高速化できますか?
以前に因数分解されたスパース正方対称行列 H と、H の次元に等しい長さのスパース ベクトル M があります。やりたいことは次のとおりです。
編集:追加情報: H は通常 4000x4000 です。z と c の計算は約 4000 回実行されますが、dVa と dVaComp の計算は 4000 ループごとに 10 回実行されるため、合計で 40000 回実行されます。(dVa と dVaComp は反復的に解決され、P_mis が更新されます)。
ここM*c*M'
で は、4 つの非ゼロ要素を持つスパース行列になります。マトラブでは:
[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 の逆関数を何度も使用していますが、事前に計算する方が高速ではありません。
ありがとう =)