即使行列式为零,我也要求矩阵的逆

时间:2019-03-29 07:19:45

标签: python scipy

即使行列式为零,我也要求矩阵的逆。我尝试使用以下代码:

import numpy as np
from scipy import linalg
matrix=np.array([[5,10],[2,4]])
print(linalg.det(matrix))
linalg.inv(matrix)

1 个答案:

答案 0 :(得分:0)

这里的问题是不同的例程如何计算矩阵行列式之间的脱节。例如:

import numpy as np
matrix=np.array([[5.,10.],[2.,4.]])
print(np.linalg.det(matrix))
print(np.linalg.slogdet(matrix))

try:
    invmatrix=np.linalg.inv(matrix)

except np.linalg.LinAlgError:
    print("inversion failed")

不产生任何异常并打印:

-1.1102230246251625e-15
(-1.0, -34.43421547668305)    

即由于累积的浮点舍入误差,不使用行列式的直接代数计算(scipy.linalg.det会产生非零行列式)。因此,标准的线性代数例程将矩阵视为非奇异的,并且由于极差的条件问题而产生了不正确的逆。

(使用numpy版本1.15.4和scipy版本1.1.0测试)