赞
踩
下面的矩阵是单数,并且AFAIK尝试将其求反应导致
numpy.linalg.linalg.LinAlgError: Singular matrix
但是我得到了一些输出矩阵。请注意,输出矩阵是无意义的结果,因为它具有一行0(这是不可能的,因为矩阵的逆本身应该是可逆的)!
我是否在这里缺少与浮点精度有关的东西,或者与真实逆相反的伪逆的计算?
$ np.__version__
'1.13.1'
$ np.linalg.inv(np.array([[2,7,7],[7,7,7],[8,7,7]]))
array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 3.43131400e+15, -2.05878840e+16, 1.71565700e+16],
[ -3.43131400e+15, 2.05878840e+16, -1.71565700e+16]])```
参考方案
在后台,NumPy和SciPy(以及许多其他软件)都退回到线性方程求解器的LAPACK实现(或C转换)(在本例中为GESV)。
由于GESV首先执行LU分解,然后检查U矩阵的对角线是否有确切的零,因此很难在分解中达到理想的零。这就是为什么您不会遇到奇异矩阵错误的原因。
除此之外,如果要与其他矩阵相乘,则永远不要求逆矩阵,而是求解AX=B。
在SciPy自版本0.19起,scipy.linalg.solve使用GESVX的“专家”驱动程序GESV,该驱动程序还会报告条件编号并发出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。