在matlab中,linsolve和mldivide有什么区别?
它们都是求解线性系统的直接求解器(与迭代求解器相反)。
mldivide
确实执行测试在解决. 有关更多信息,请参阅此线程中艾伦的回答。另请参阅 MATLAB 在此处的mldivide
算法帮助。
mldivide
对于方阵:如果 A 是对称的并且具有实数正对角元素,MATLAB 会尝试 Cholesky 分解。如果 Cholesky 分解失败,MATLAB 将执行对称的不定分解。如果 A 是上 Hessenberg,MATLAB 使用高斯消元法将系统简化为三角矩阵。如果 A 是正方形,但既不是置换三角形、对称和正定三角形,也不是 Hessenberg,则 MATLAB 使用带有部分旋转的 LU 分解执行一般三角形分解
linsolve
对于方阵:带有部分旋转的 LU 分解
mldivide
对于linsolve
矩形矩阵:QR 分解
linsolve
正如帮助文档在 mathworks 网站上所建议的那样,您可以通过使用当且仅当您知道什么来避免额外的测试过程(艾伦在他的回答中使用了“开销”opts
这个词)就像提前一样。对于大问题,您可以节省一些时间。例如:
opts.POSDEF = true; linsolve(A,b,opts)
会回来如果你知道的话是预先肯定的。然而,错误的选择opts
会导致错误的结果。
如果满足某些标准,linsolve
则mldivide
使用相同的分解过程。例如,对于满足某些属性的稠密正定系统,或者您有一个超定系统并且两者都执行最小二乘拟合。
此外,linsolve
还可以进行符号计算。当您有一个具有无限数量的解决方案的小型未定系统时,这很方便。linsolve
使您能够象征性地解决它,mldivide
不能那样做。但是,如果变量没有以符号方式声明,mldivide
并且linsolve
会给您相同的警告消息“矩阵对于工作精度来说是奇异的”。
最后但并非最不重要的一点是,linsolve
不支持像以下矩阵这样的稀疏系统(蓝点表示非零条目)。Whilemldivide
可以在大小小于 200k x 200k 时稳健地处理稀疏系统。