16

我在几个地方读到(在文档和这篇博文中:http: //blogs.mathworks.com/loren/2007/05/16/ purpose- of-inv/)在 Matlab 中使用 inv 不是推荐,因为它速度慢且不准确。

我试图找出这种不准确的原因。截至目前,谷歌没有给出有趣的结果,所以我想这里有人可以指导我。

谢谢 !

4

3 回答 3

32

我提到的不准确之处在于方法 INV,而不是 MATLAB 的实现。您应该使用 QR、LU 或其他方法来求解方程组,因为这些方法通常不需要对相关系统的条件数进行平方。使用 inv 通常需要通过平方原始系统的条件数而失去准确性的操作。

——洛伦

于 2009-09-14T12:18:19.667 回答
19

我认为 Loren 博客的重点不是 MATLAB 的inv函数比计算矩阵逆的任何其他数值实现特别慢或更不准确;相反,在大多数情况下不需要逆本身,您可以通过其他方式继续(例如使用\反斜杠运算符求解线性系统,而不是计算逆)。

于 2009-09-14T07:53:50.450 回答
1

inv()肯定比\除非你有多个右手边向量来解决要慢。但是,MathWorks 关于不准确性的建议是由于数值线性代数结果中的界限过于保守。换句话说,inv()并非不准确。该链接进一步详细说明:http: //arxiv.org/abs/1201.6035

一些广泛使用的教科书让读者相信,通过将向量 b 乘以计算出的逆 inv(A) 来求解线性方程组 Ax = b 是不准确的。几乎所有其他关于数值分析和数值线性代数的教科书都建议不要使用计算逆而不说明这是否准确。事实上,在如何计算逆的合理假设下,x = inv(A)*b 与最佳后向稳定求解器计算的解一样准确。

于 2016-02-02T10:06:44.463 回答