gpt4 book ai didi

python - Scipy null_space 没有给我正确的答案

转载 作者:行者123 更新时间:2023-12-01 00:19:01 27 4
gpt4 key购买 nike

我在使用 Scipy null_space 时遇到问题。举个例子:

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]]))

我在特征值元组中有特征值和特征向量。现在如果eA 的特征值(例如 13.477),显然是零空间 A - e I但是,不应为空:

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

返回

array([], shape=(3, 0), dtype=complex128)

这应该是对应于 eigen[0][0] 的特征向量(请注意,当我为 eigen[0][1]eigen[0][2] 运行相同的代码时,它会正确返回我们上面看到的特征向量)。为了检查这一点,我要求 (A-eI) 的特征值和特征向量:

null_eigen = np.linalg.eig(A-eigen[0][0]*np.eye(3))

输出为 null_eigen =

(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_space 没有拾取它?

最佳答案

来自 null_space 的文档,

rcond : Relative condition number. Singular values s smaller than rcond * max(s) are considered zero. Default: floating point eps * max(M,N).

因此 rcond 确定有效的零空间。 float 学并不精确,因此对于特征值来说,这恰好滑到了阈值之上。对 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]]

更多详情您还可以查看at the source code .

关于python - Scipy null_space 没有给我正确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59091003/

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