我有一個10000 * 10000(矩陣A)稀疏矩陣,每行只包含5個非零元素。矩陣求逆的算法MATLAB
現在問題是對角元素和常量(在B矩陣s.t. AX = B中)在每次迭代後都會更新。如果我使用通常的Matlab函數:「inv」或者通過高斯消除法,對於單次迭代計算解決方案大約需要25秒,並且問題所需的迭代次數大約爲:100-500計算最終的解決方案:X。
如果我不想使用並行計算,我需要一些建議。
幫助人們! :)
我有一個10000 * 10000(矩陣A)稀疏矩陣,每行只包含5個非零元素。矩陣求逆的算法MATLAB
現在問題是對角元素和常量(在B矩陣s.t. AX = B中)在每次迭代後都會更新。如果我使用通常的Matlab函數:「inv」或者通過高斯消除法,對於單次迭代計算解決方案大約需要25秒,並且問題所需的迭代次數大約爲:100-500計算最終的解決方案:X。
如果我不想使用並行計算,我需要一些建議。
幫助人們! :)
感嘆。人們認爲,僅僅因爲他們在學校學到A * X = B的解決方案就是形成X = inv(A)* B,這就是要做的事情。是的,你的教科書說要這樣做。令人驚訝的是,有大量的人試圖教你這樣的事情。可悲的是,他們錯了,他們教別人教錯誤的東西,甚至把它放入書本。這種愚蠢傳播,永遠不會結束。即使教科書作者知道自己A \ B在理論上比inv(A)* B更好,但以逆矩陣形式寫出它仍然更容易。
警告:您不想形成逆矩陣,而且上帝保佑,您不想使用高斯消元。 (讓專業人員在編譯的工具中爲你編寫代碼)。相反,在MATLAB中使用反斜槓,這是寫得很好的有效的&。
X = A \ B;
如果您將頻繁地解決同一個系統,那麼使用像LU這樣的因式分解。更好的辦法是使用許多右手邊作爲B的列,一次解決所有的系統。無可否認,如果矩陣不斷變化,這不是一個選項,但仍然是最好的反斜槓。
(爲什麼INV不是一個好主意?它創建了一個基本全矩陣,以少的零,它比慢,而不是作爲數字表示爲反斜線穩定等)
最後,如果你的矩陣是那是稀疏的,那麼爲什麼以上帝的名義,你沒有使用矩陣的稀疏存儲?對於稀疏矩陣,反斜槓的速度將非常快。
我得到你一直想要勾畫的東西。已經嘗試過一次。僅僅爲了你的知識,(\)操作符也使用高斯消除。請隨時在MATLAB網站下的A \ b文檔中進行驗證。順便說一下,「稀疏存儲」是什麼意思? –
不,你沒有得到我要告訴你的,甚至不是很遠。反斜槓採用一種方法並不意味着你可以通過自己編寫高斯消除來獲得。就()運算符而言,它不存在,儘管\確實存在。 (嘆氣)接下來,學會使用稀疏矩陣。幫你一個忙。 (幫助稀疏)。 – 2013-06-19 14:43:44