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

计算科学 matlab 线性求解器
2021-12-06 05:12:02

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

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

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

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

谢谢!

1个回答

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

mldivide确实执行测试A在解决Ax=b. 有关更多信息,请参阅此线程中艾伦的回答。另请参阅 MATLAB 在此处的mldivide算法帮助。

mldivide对于方阵:如果 A 是对称的并且具有实数正对角元素,MATLAB 会尝试 Cholesky 分解。如果 Cholesky 分解失败,MATLAB 将执行对称的不定分解。如果 A 是上 Hessenberg,MATLAB 使用高斯消元法将系统简化为三角矩阵。如果 A 是正方形,但既不是置换三角形、对称和正定三角形,也不是 Hessenberg,则 MATLAB 使用带有部分旋转的 LU 分解执行一般三角形分解

linsolve对于方阵:带有部分旋转的 LU 分解

mldivide对于linsolve矩形矩阵:QR 分解

linsolve正如帮助文档在 mathworks 网站上所建议的那样,您可以通过使用当且仅当您知道什么来避免额外的测试过程(艾伦在他的回答中使用了“开销opts这个A就像提前一样。对于大问题,您可以节省一些时间。例如:

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

会回来x如果你知道的话A是预先肯定的。然而,错误的选择opts会导致错误的结果。

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

此外,linsolve还可以进行符号计算当您有一个具有无限数量的解决方案的小型未定系统时,这很方便。linsolve使您能够象征性地解决它,mldivide不能那样做。但是,如果变量没有以符号方式声明,mldivide并且linsolve会给您相同的警告消息“矩阵对于工作精度来说是奇异的”。

最后但并非最不重要的一点是,linsolve不支持像以下矩阵这样的稀疏系统(蓝点表示非零条目)。Whilemldivide可以在大小小于 200k x 200k 时稳健地处理稀疏系统。 稀疏示例