0

我在Matlab中實現了LU分解算法,用於求解線性系統的一些大型稀疏矩陣。當我的L,U矩陣中,我使用的後向代入以及前向代入算法解決三角形線性系統:在Matlab中求解稀疏三角形線性系統

%x = U\y; 

for i = n : -1 : 1 
    x(i,:) = (y(i,:)-U(i,:)*x)/U(i,i); 
end 

但我發現這個代碼是瓶頸。儘管我可以使用A \ b來獲得解決方案,但是我想知道如何在Matlab中實現一個有效的算法來解決此問題,例如,我可以編寫矩陣產品來模擬以下操作而不使用for循環嗎?

(我得到了一些參考書籍和紙張,但所有的代碼是不是在Matlab,只爲C++或C代碼)

回答

3

第一關:正確性去之前速度;您發佈的環路產生的結果不同U\y,所以你可能要檢查的是第一:)

據我所知,反斜線不輸入矩陣一些檢查,並相應地調用最快的算法。當這些檢查表明A是下三角形時,它將完成您所做的(但可能更有效)。

無論如何,要加快你的代碼:你應該預先分配x,否則Matlab被迫在每次迭代時增加向量。此外,請致電您的循環變量ii   -   i是虛構單元,每次迭代的名稱解析需要一些時間。因此,在總結:

x = zeros(size(y)); 
for ii = n : -1 : 1 
    x(ii,:) = (y(ii,:)-U(ii,:)*x)/U(ii,ii); 
end 

注意,沒有「矢量化」的解決方案,爲下一個結果依賴於前一個。