许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Matlab根号运算符与mldivide(反斜杠运算符“\”)实现方法

Matlab根号运算符与mldivide(反斜杠运算符“\”)实现方法

阅读数 6
点赞 0
article_banner

对于x = A\b , 反斜杠运算符包含许多algorithm来处理不同types的inputmatrix。 因此,matrixA被诊断并且根据其特征select执行path。

当A是一个完整的matrix时,下面的页面用伪代码描述:

if size(A,1) == size(A,2) % A is square if isequal(A,tril(A)) % A is lower triangular x = A \ b; % This is a simple forward substitution on b elseif isequal(A,triu(A)) % A is upper triangular x = A \ b; % This is a simple backward substitution on b else if isequal(A,A') % A is symmetric [R,p] = chol(A); if (p == 0) % A is symmetric positive definite x = R \ (R' \ b); % a forward and a backward substitution return end end [L,U,P] = lu(A); % general, square A x = U \ (L \ (P*b)); % a forward and a backward substitution end else % A is rectangular [Q,R] = qr(A); x = R \ (Q' * b); end

对于非正方形matrix,使用QR分解 。 对于正方形三angular形matrix,它执行简单的向前/向后replace 。 对于平方对称正定matrix,使用Cholesky分解 。 否则LU分解被用于一般的正方形matrix。

更新: MathWorks更新了mldivide doc页面中的algorithm部分 , mldivide带有一些不错的stream程图。 看到这里和这里 (完整和稀疏的情况下)。

72dc611aaff7a3c732e2e991c86239c2.png

所有这些algorithm在LAPACK中都有相应的方法,实际上它可能是MATLAB正在做的(请注意,MATLAB的最新版本随优化的英特尔MKL实现一起提供)。

使用不同方法的原因是,它试图使用最具体的algorithm来求解利用系数matrix的所有特性(或者因为它会更快或更稳定)的方程组。 所以你当然可以使用一般求解器,但它不会是最有效的。

事实上,如果事先知道A是什么,那么可以通过调用linsolve并直接指定选项来跳过额外的testing过程。

如果A是矩形或单数,也可以使用PINV来find一个最小范数最小二乘解(用SVD分解来实现):

x = pinv(A)*b

以上所有适用于密集matrix,稀疏matrix是一个完全不同的故事。 通常在这种情况下使用迭代求解器 。 我相信MATLAB使用UMFPACK和SuiteSpase包中的其他相关库来直接求解。

使用稀疏matrix时,可以打开诊断信息,并使用spparms查看执行的testing和select的algorithm:

spparms('spumoni',2) x = A\b;

而且,反斜线运算符也可以在gpuArray上运行 ,在这种情况下,它依靠cuBLAS和MAGMA在GPU上执行。

它也适用于在分布式计算环境中工作的分布式数组 (工作分配在每个工作人员只有部分数组的计算机中,可能整个matrix不能一次存储在内存中)。 底层的实现是使用ScaLAPACK 。

如果你想实现所有这些,这是一个非常高的顺序:)


 相关资源:利用matlab进行EIT正问题有限元求解_eit正问题资源
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空