gpt4 book ai didi

python - numpy.linalg.inv 返回奇异矩阵的逆矩阵

转载 作者:行者123 更新时间:2023-12-01 21:10:24 24 4
gpt4 key购买 nike

下面的矩阵是奇异的,据我所知尝试反转它应该会导致

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(以及许多其他软件)回退到线性方程求解器(在本例中为 GESV)的 LAPACK 实现(或 C 语言翻译)。

由于 GESV 首先执行 LU 分解,然后检查 U 矩阵的对角线是否有精确的零,因此在分解中很难达到完美的零。这就是为什么你不会得到奇异矩阵错误。

除此之外,如果您与其他矩阵相乘,则永远不应该反转矩阵,而是求解 AX=B

自版本 0.19 起,在 SciPy 中,scipy.linalg.solve 使用 GESV 的“专家”驱动程序 GESVX,该驱动程序还会报告条件编号并发出警告。这与丢失奇点时的 Matlab 行为类似。

In [7]: sp.linalg.solve(np.array([[2,7,7],[7,7,7],[8,7,7]]), np.eye(3))
...\lib\site-packages\scipy\linalg\basic.py:223: RuntimeWarning: scipy.linalg.solve
Ill-conditioned matrix detected. Result is not guaranteed to be accurate.
Reciprocal condition number: 1.1564823173178713e-18
' condition number: {}'.format(rcond), RuntimeWarning)
Out[7]:
array([[ 0.00000000e+00, -1.00000000e+00, 1.50000000e+00],
[ 3.43131400e+15, -2.05878840e+16, 1.71565700e+16],
[ -3.43131400e+15, 2.05878840e+16, -1.71565700e+16]])

关于python - numpy.linalg.inv 返回奇异矩阵的逆矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com