matlab - 解决*稀疏*上三角系统

标签 matlab linear-algebra sparse-matrix triangular

如果我想求解一个完整上三角系统,我可以调用linsolve(A,b,'UT')。然而,这目前不支持稀疏矩阵。我该如何克服这个问题?

最佳答案

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

这也适用于备用矩阵,正如 nate 已经指出的那样。

请注意,此运算符还求解具有非正方形 A 的 UT 系统或者如果 A在主对角线上有一些元素等于零(或 < eps )。它以最小二乘法解决了这些情况,这对您来说可能是理想的,也可能不是。您可以在执行求解之前检查这些情况:

if size(A,1)==size(A,2) && all(abs(diag(A)) > eps)
    x = A\b;
else
    %# error, warning, whatever you want
end

通过键入阅读有关(反)斜杠运算符的更多信息

>> help \

>> help slash

在 Matlab 命令提示符下。

关于matlab - 解决*稀疏*上三角系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765184/

相关文章:

Matlab:当数据不在图上时在图上指示?

matlab - 在函数输出中传递多个函数句柄

matlab - 设置稀疏矩阵多个值的快速方法

python - csr_matrix 的点积导致段错误

python - Scipy稀疏...数组?

java - Jena 文件管理器找不到文件?

windows - 如何在 Windows 平台上禁用 JVM 以运行后台 matlab 脚本

测试两个代数表达式等价性的算法

c++ - 如何将矩阵因式分解为核矩阵的乘积?

c++ - 高斯-塞德尔法求解非线性方程