我在几个地方(在文档和博客文章中http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/)读到,不建议在Matlab中使用inv,因为它很慢且不准确。
我试图找出这种不准确的原因。截至目前,谷歌没有给出有趣的结果,所以我认为有人可以指导我。
谢谢!
答案 0 :(得分:31)
我提到的不准确性是方法INV,而不是MATLAB的实现。您应该使用QR,LU或其他方法来求解方程组,因为这些方法通常不需要求平方系统的条件数。使用inv通常需要通过平方原始系统的条件数来失去准确性的操作。
- 洛伦
答案 1 :(得分:19)
我认为Loren博客的观点并不是MATLAB的inv
函数比计算矩阵逆的任何其他数值实现特别慢或更不准确;相反,在大多数情况下,不需要逆本身,并且您可以通过其他方式(例如使用\
求解线性系统 - 反斜杠运算符 - 而不是计算逆运算)。
答案 2 :(得分:1)
inv()
肯定比\
慢,除非您有多个右侧矢量要求解决。但是,MathWorks关于不准确性的建议是由于数值线性代数结果中的过于保守的界限。换句话说,inv()
并非不准确。该链接进一步阐述:http://arxiv.org/abs/1201.6035
几种广泛使用的教科书使读者相信通过将向量b乘以计算的逆inv(A)来求解线性方程组Ax = b是不准确的。实际上,所有其他关于数值分析和数值线性代数的教科书都建议不要使用计算的逆,而不说明这是否准确。实际上,在关于如何计算逆的合理假设下,x = inv(A)* b与最佳后向稳定求解器计算的解一样精确。