如果我想解决一个完整的上三角系统,我可以拨打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