2013-07-30 121 views
1

我使用Armadillo C++庫來求解中/大尺寸線性系統(1000-5000方程)。Armadillo C++ LU分解

由於我必須解決不同的線性系統

AX = B

其中A始終是相同的和B的變化,我想LU因式分解甲只有一次,重複使用與不同的LU分解灣不幸的是,我不知道如何在犰狳中執行這種操作。

我所做的只是A矩陣的LU分解:

但現在我想用矩陣P,L和U來解決不同硼載體幾個線性系統。

請問您能幫我嗎?

+0

也許你可以告訴我們你已經試過了嗎?也許你可以編輯你的問題來包含你的嘗試的[SSCCE](http://sscce.org/)? –

+0

感謝Joachim,我加了我試過的... –

回答

2

由於A = P.t()*L*U(其中平等只是近似的,由於舍入誤差),在P.t()*L*U*x = b求解x要求置換的B行和執行前進和後退替代:

x = solve(trimatu(U), solve(trimatl(L), P*b)); 

由於缺乏一個真正的犰狳中的三角解算器以及執行行置換的快速方法,就直接調用相關的計算LAPACK子例程而言,此過程效率不高。

一般建議是避免在更高級別的庫中顯式LU分解,如犰狳。

  1. 如果所有不同b的是在同一時間已知的,將它們存儲爲列的矩形矩陣BX = solve(A,B);
  2. 如果不同b的是公知的一次一個,然後預先計算AINV = A.i();x = AINV*b;如果不同的rhs數目會更有效率矢量足夠大。看到這個answer到類似question