矩阵条件数过小,简单理解用均值特征值(的绝对值)最小值和最大值的比值来度量。
比如奇异矩阵(行列式等于0,或者很小)就是一个典型例子。
在数值计算的情况下,浮点数都有运算精度,哪怕不报错,计算的精度也堪忧。
在直接矩阵求逆运算的时候,最好用rcond看看矩阵的条件数,或者用eig、svd之类的看看最小的特征值是不是非常接近于0,如果是绝对值很小的数,通常求逆运算都不太可靠。
如果是做工程运算(计量模型等),说明建模基本不通,哪怕是能得到一个最终结果。需要寻找更好的模型形式,或者换针对性的“稳定”的算法,比如用“更为稳定”的矩阵分解算法。
如果实在是不能修改模型,硬要算,比如计量里面就有一个岭回归的方法,代表了一类思路,就是A+ eps*eye(N),把A这个近似奇异矩阵的对角线上“人为故意”加一些“扰动”,进而能得到一个结果。
至于有小伙伴提到inv(100*A)这种扩大矩阵A中大小的问题,通常是不改变实质性困难的,但是可能能通过“计算”,能计算结果和计算结果的稳定性有时候不是一回事。
|