Python Scipy null_空间没有给我正确的答案

Python Scipy null_空间没有给我正确的答案,python,numpy,scipy,Python,Numpy,Scipy,我对Scipy null_空间有问题。以以下为例: A = np.array([[7,3,2],[3,9,4],[2,4,5]]) eigen = np.linalg.eig(A) 带输出本征= (array([13.477, 5. , 2.523]), array([[ 0.486, 0.873, -0.041], [ 0.74 , -0.436, -0.511], [ 0.464, -0.218, 0.858]])) 我在特征元组中有特征值和特征

我对Scipy null_空间有问题。以以下为例:

A = np.array([[7,3,2],[3,9,4],[2,4,5]])
eigen = np.linalg.eig(A)
带输出本征=

(array([13.477,  5.   ,  2.523]), 
array([[ 0.486,  0.873, -0.041],
       [ 0.74 , -0.436, -0.511],
       [ 0.464, -0.218,  0.858]]))
我在特征元组中有特征值和特征向量。现在,如果
e
A
的特征值(例如13.477),那么
A-e I
不应为空,但是:

null = la.null_space(A-eigen[0][0]*np.eye(3))
返回

array([], shape=(3, 0), dtype=complex128)
这应该是对应于
本征[0][0]
的本征向量(请注意,当我为
本征[0][1]
本征[0][2]
运行相同的代码时,它正确地返回了我们上面看到的本征向量)。 为了检查这一点,我询问了
(A-eI)
的特征值和特征向量:

输出为null_特征=

(array([-1.243e-14, -8.477e+00, -1.095e+01]), 
 array([[ 0.486,  0.873, -0.041],
        [ 0.74 , -0.436, -0.511],
        [ 0.464, -0.218,  0.858]]))
显然,与13.477的特征向量相对应的第一个特征值“几乎”为零,但为什么scipy.linalg.null_空间没有拾取它

rcond
:相对条件编号。小于
rcond*max
的奇异值s被视为零。默认值:
浮点eps*max(M,N)

因此,
rcond
确定有效的零空间。浮点数学是不精确的,因此对于特征值来说,它恰好滑到阈值以上。对
rcond
使用较大的数字将得到预期的结果:

import numpy as np
from scipy.linalg import null_space

A = np.array([[7, 3, 2],
              [3, 9, 4],
              [2, 4, 5]])
eigen = np.linalg.eig(A)
print(eigen[1][:, 0])
print(null_space(A - eigen[0][0]*np.eye(3), rcond=1e-14))
对于输出:

[0.48622704 0.74041411 0.46407996]
[[-0.48622704]
 [-0.74041411]
 [-0.46407996]]
有关更多详细信息,您还可以查看

[0.48622704 0.74041411 0.46407996]
[[-0.48622704]
 [-0.74041411]
 [-0.46407996]]