为什么Matlab的inv慢和不准确?
我在几个地方(在文档和这个博客文章中阅读: http : //blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/ )看到,在Matlab中使用inv不是build议,因为它是缓慢和不准确的。
我试图找出这个不准确的原因。 到目前为止,Google并没有给出有意思的结果,所以我认为这里有人可以指导我。
谢谢 !
我提到的不准确性是用INV方法,而不是MATLAB的实现。 您应该使用QR,LU或其他方法来求解方程组,因为这些方法通常不需要对相关系统的条件编号进行平方。 使用inv通常需要通过对原始系统的条件编号进行平方而失去准确性的操作。
–Loren
我认为Loren博客的观点并不是MATLAB的inv
函数比任何其他的计算matrix逆的数值实现都特别慢或者更不准确; 相反,在大多数情况下,反过来本身并不是必须的,你可以通过其他方式来进行(例如用\
反斜杠运算符来求解一个线性系统 – 而不是计算一个反函数)。
inv()
肯定比\
慢,除非你有多个右侧向量来解决。 然而,MathWorks对于不准确性的build议是由于数值线性代数结果的过分保守的限制。 换句话说, inv()
不是不准确的。 该链接进一步阐述: http : //arxiv.org/abs/1201.6035
一些广泛使用的教科书引导读者相信,通过将向量b乘以计算的反向inv(A)来求解线性方程组Ax = b是不准确的。 几乎所有其他关于数值分析和数值线性代数的教科书都build议不要使用计算的逆,而没有说明这是否准确。 事实上,在如何计算逆的合理假设下,x = inv(A)* b与最佳反向稳定求解器计算的解相同。