如果我想解決一個完整的上三角系統,我可以撥打linsolve(A,b,'UT')
。但是,目前稀疏矩陣不支持這種方式。我該如何克服這一點?求解*稀疏*上三角系統
回答
編輯既然你需要的是一個三角形的解決方法,也稱爲向後/向前替代,可以使用普通的MATLAB反斜線\
操作爲:
x = U\b
正如原答覆中提到,MATLAB會認識到一個事實,即你的矩陣是三角形。可以肯定的是,您可以將性能與SuiteSparse中的cs_usolve
程序進行比較。它是一個用C實現的mex函數,它計算上三角稀疏矩陣的稀疏三角解(這裏也有類似的函數:cs_lsolve
,cs_utsolve
和cs_ltsolve
)。
您可以看看原始MATLAB的performance comparison和cs_l(t)solve
在稀疏Cholesky分解的上下文中。從本質上講,MATLAB的性能很好。唯一的缺陷是,如果你想解決一個換位系統
x = U'\b
MATLAB不不承認,並明確創建的U
轉置。在這種情況下,您應該明確地呼叫cs_utsolve
。
原來的答覆如果你的系統是對稱的,你只存儲上三角矩陣的一部分(這就是我在你的問題理解全),如果Cholesky分解是適合你的,chol處理對稱矩陣,如果你的矩陣是肯定的。對於無限矩陣,您可以使用ldl。兩者都處理稀疏存儲並處理對稱矩陣部分。
較新的matlab版本使用cholmod and suitesparse。這是迄今爲止我知道的表現最好的Cholesky分解。在matlab中,它也使用平行BALS平行化。
從上述功能得到的因素是上三角矩陣L,使得
A=LL'
所有你現在需要做的是執行前向和後向代入,這是簡單和便宜的。在Matlab這在THA反斜槓操作者
x=L'\(L\b)
所述基質可以是稀疏的,並且MATLAB將認識到,它是上/下三角自動完成。您還可以將此調用與使用cholesky因式分解所獲得因子的正向替換一起使用。
我認爲他的意思是'A = triu(...)'(full)vs'A =稀疏(triu(...))'(稀疏) –
@RodyOldenhuis哦,現在我再讀一遍我認爲你是對的。但是我的答案無論如何都包含了關於三角求解的信息(向後/向前替換) - 最後,這是你將矩陣因子分解後所做的事情:) – angainor
可以使用MLDIVIDE(\)或MRDIVIDE(/)運營商對您的稀疏矩陣...
UT和LT系統是最容易解決的系統之一。請閱讀on the wiki。知道這一點,很容易寫出你自己的UT或LT解算器:
%# some example data
A = sparse(triu(rand(100)));
b = rand(100,1);
%# solve UT system by back substitution
x = zeros(size(b));
for n = size(A,1):-1:1
x(n) = (b(n) - A(n,n+1:end)*x(n+1:end))/A(n,n);
end
LT系統的過程非常相似。
話雖如此,它通常是更容易和更快地使用Matlab的反斜線操作:
x = A\b
這也適用於備用矩陣,如內特已經指出。
請注意,該運算符還可以解決非方形的UT系統A
或A
在主對角線上有一些等於零的元素(或< eps
)。它以最小二乘的方式解決這些情況,這可能會或可能不會讓您滿意。通過鍵入
>> help \
或
>> help slash
Matlab的命令提示符
if size(A,1)==size(A,2) && all(abs(diag(A)) > eps)
x = A\b;
else
%# error, warning, whatever you want
end
瞭解更多關於(回)斜線操作:您可以檢查這些案件執行前解決。
- 1. 在Matlab中求解稀疏三角形線性系統
- 2. 在Matlab中求解稀疏線性系統
- 3. csparse錯誤同時求解稀疏系統方程
- 4. 稀疏三元組稀疏矩陣matlab
- 5. Matlab - 稀疏矩陣系統分辨率
- 6. 稀疏矩陣乘法只計算上三角形
- 7. scipy中針對稀疏正定線性系統的推薦直接求解器?
- 8. 使用LAPACK和SuperLU的犰狳線性稀疏系統求解器
- 9. C++如何解決非常大的稀疏線性系統系統
- 10. 什麼稀疏求解器支持對角線存儲格式
- 11. 如何解決從斯卡拉大型稀疏線性系統
- 12. 檢測Matlab故障解決稀疏線性系統
- 13. 從稀疏生存模型提取係數與稀疏= T
- 14. CPU上最快的多線程迭代稀疏求解器?
- 15. matlab:稀疏矩陣分解
- 16. C++中的三角形和稀疏矩陣
- 17. 大型稀疏矩陣,以三角矩陣R
- 18. numpy矩陣乘法到三角形/稀疏存儲?
- 19. Matlab中的稀疏三維矩陣
- 20. 三維稀疏矩陣實現?
- 21. 求解系統
- 22. OSX上的稀疏BLAS
- 23. 斯卡拉微風解決稀疏系統AX = B,如何構建體B
- 24. 用於訪問稀疏文件的操作系統API?
- 25. 使用座標存儲系統創建稀疏矩陣?
- 26. 從稀疏矩陣的行創建一個稀疏對角矩陣
- 27. 檢查稀疏
- 28. 稀疏矩陣
- 29. 在稀疏表
- 30. 用三個未知變量求解三個方程的系統
使用['full'](http://www.mathworks.com/help/matlab/ref/full.html)? – chaohuang
@ chaohuang一個非常糟糕的主意。他使用「稀疏」是有原因的。 – angainor
看看我更新的答案。 – angainor