为什么Matlab';s inv速度慢且不准确?
我在一些地方(在doc和这篇博文:)读到,不建议在Matlab中使用inv,因为它速度慢且不准确 我正试图找出这种不准确的原因。到目前为止,谷歌并没有给我一个有趣的结果,所以我想这里有人可以指导我为什么Matlab';s inv速度慢且不准确?,matlab,linear-algebra,numerical-analysis,matrix-inverse,Matlab,Linear Algebra,Numerical Analysis,Matrix Inverse,我在一些地方(在doc和这篇博文:)读到,不建议在Matlab中使用inv,因为它速度慢且不准确 我正试图找出这种不准确的原因。到目前为止,谷歌并没有给我一个有趣的结果,所以我想这里有人可以指导我 谢谢 我认为Loren博客的重点并不是说MATLAB的inv函数比计算矩阵逆的任何其他数值实现都要慢或更不准确;相反,在大多数情况下,不需要求逆本身,您可以通过其他方法进行(例如使用反斜杠操作符\-求解线性系统,而不是计算逆)。我提到的不准确是INV方法,而不是MATLAB对其的实现。您应该使用QR、
谢谢 我认为Loren博客的重点并不是说MATLAB的
inv
函数比计算矩阵逆的任何其他数值实现都要慢或更不准确;相反,在大多数情况下,不需要求逆本身,您可以通过其他方法进行(例如使用反斜杠操作符\
-求解线性系统,而不是计算逆)。我提到的不准确是INV方法,而不是MATLAB对其的实现。您应该使用QR、LU或其他方法来求解方程组,因为这些方法通常不需要对相关系统的条件数求平方。使用inv通常需要对原始系统的条件编号进行平方运算,从而失去精度
--Loreninv()
肯定比\
慢,除非你有多个右手边向量要解。然而,MathWorks关于不精确性的建议是由于数值线性代数结果中存在过度保守的界。换句话说,inv()。该链接进一步阐述了:
一些广泛使用的教科书使读者相信,通过将向量b乘以计算出的逆inv(a)来求解线性方程组Ax=b是不准确的。几乎所有其他关于数值分析和数值线性代数的教科书都建议不要使用计算逆,而不说明这是否准确。事实上,在关于如何计算逆的合理假设下,x=inv(A)*b与最佳后向稳定解算器计算的解一样精确
此外,反斜杠运算符(通常)给出的结果比inv(A)*b更准确:它选择了一个合适的算法来解A*x=b。为了让学生明白,为了解线性系统Ax=b,您需要编写x=A\b
,而不是x=inv(A)*b
。计算A的逆是不必要的,不健壮,也不快速。在大量数学公式中,你可以看到a^-1,该算法可以在不计算a的逆的情况下实现。也就是说,对于小的满秩矩阵,计算inv(a)几乎总是很好的。对于大矩阵或病态矩阵,它可能会有问题。