是否有可能通過例如加速大型稀疏矩陣計算來加速稀疏矩陣計算。最佳地放置偏食?加快稀疏矩陣計算
我問的是:我可以通過強制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的倒數,但預先計算它並不會更快。
[L,U,P,Q] = lu(H);
額外的置換矩陣Q
重新排序的列增加:
有幾個問題:你說「'P'是一個預定義的完整向量」,但是你將它生成爲一個與'H'大小相同的稀疏矩陣。另外,在「數學」「z」和實現的「z」之間,有一個負號不同。這使得你不清楚你想要完成什麼;你能否糾正/澄清這些問題? – 2013-05-13 08:17:39
感謝您指出Rody的錯誤。 「預定義」P現在變爲P_mis,並且是在找到dVa和dVaComp時針對每次迭代更新的失配向量。不要與置換矩陣P混淆。它應該是z前面的負號。 – 2013-05-13 08:31:33
有一點讓你感到困惑,你使用t一次換位,一次使用變量。順便說一句。我記得黑暗時,如果你計算M * M',Matlab有一些優化 - 因爲c是標量,你應該可以在dVaComp中切換它。 – bdecaf 2013-05-13 13:05:16