在Matlab中,linsolve和mldivide有什么区别?


10

在matlab中,在所有确定的,超定的和未定的情况下,linsolvemldivide都用于求解线性方程组。

阅读他们的文档,我想知道他们之间有什么区别?在这三种情况下,他们是否使用几乎相同的矩阵分解和三角化算法?

如果A具有opts中的属性,则linsolve比mldivide快,因为linsolve不执行任何测试来验证A具有指定的属性

mldivide是否执行相同的测试以验证A是否具有特殊属性?还是mldivide只是将它们视为一般情况而没有特殊属性?

谢谢!

Answers:


16

它们都是直接求解线性系统的求解器(与迭代求解器相反)。

mldivide确实在解决执行了的测试。有关更多信息,请参见此线程中的艾伦答案。另请参见此处的MATLAB 算法帮助。A x = bAAx=bmldivide

mldivide对于平方矩阵:如果A是对称的并且具有实的正对角线元素,则MATLAB会尝试进行Cholesky分解。如果Cholesky因式分解失败,则MATLAB将执行对称,不确定的因式分解。如果A为上Hessenberg,则MATLAB使用高斯消去法将系统简化为三角矩阵。如果A是正方形,但既不是置换的三角形,不是对称和正定的,也不是Hessenberg,则MATLAB使用LU分解和部分枢轴旋转来执行常规的三角分解

linsolve 对于平方矩阵:部分旋转的LU分解

mldividelinsolve矩形矩阵:QR分解

linsolve作为帮助文档在MathWorks公司的网站显示,你可以避免额外的测试过程(艾伦用在他的答案的单词“开销”)通过opts当且仅当你知道是什么是喜欢提前。对于大问题,您可以节省一些时间。例如:A

opts.POSDEF = true; linsolve(A,b,opts)

如果您事先知道是正定的,则将返回。但是,选择不正确会导致错误的结果。xAopts

如果某些条件得到满足,linsolve并且mldivide也使用相同的分解过程。例如,对于满足某些属性的稠密正定系统,或者您有一个超定系统,并且两者都执行最小二乘拟合。

而且,linsolve还可以执行符号计算。当您有一个不确定的小型系统,且具有无限数量的解决方案时,这非常方便。linsolve使您可以象征性地解决它,mldivide无法做到。但是,如果未以符号形式声明变量,mldivide并且linsolve会给您同样的警告消息“矩阵对于工作精度是奇异的”。

最后但并非最不重要的一点是,linsolve它不支持稀疏系统,例如以下矩阵(蓝点表示非零输入)。当mldivide大小小于200k x 200k时,可以稳健地处理稀疏系统。 稀疏的例子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.