gpt4 book ai didi

python - Scipy.linalg.eig() 给出与 GNU Octave 的 eig() 不同的特征向量

转载 作者:行者123 更新时间:2023-11-28 22:42:58 31 4
gpt4 key购买 nike

我想用 lambda * M * v = K * v 计算广义特征值问题的特征值,其中 lambda 是特征值,v 是特征向量,M 和 K 是矩阵。假设我们有

K =

1.8000 + 0.0000i -1.0970 + 0.9550i
-1.0970 - 0.9550i 1.8000 + 0.0000i

M =

209 0
0 209

在 Octave 中,如果我执行 [V,D]=eig(K,M),我得到:

V =

0.53332 - 0.46429i -0.53332 + 0.46429i
0.70711 + 0.00000i 0.70711 + 0.00000i

D =

Diagonal Matrix

0.34555 0
0 3.25445

但是,如果我在 python 中使用 Scipy 执行 scipy.linalg.eig(K, b=M),我会得到不同的结果:

>>> import numpy as np
>>> import scipy as sp
>>> import scipy.linalg
>>> K = np.mat([[1.8, -1.097+0.995j], [-1.097-0.955j, 1.8]])
>>> M = np.mat([[209., 0.], [0., 209.]])
>>> M
matrix([[ 209., 0.],
[ 0., 209.]])
>>> K
matrix([[ 1.800+0.j , -1.097+0.955j],
[-1.097-0.955j, 1.800+0.j ]])
>>> D, V = sp.linalg.eig(K, b=M)
>>> D
array([ 0.00165333 -1.99202696e-19j, 0.01557155 +0.00000000e+00j])
>>> V
array([[ 0.70710678 +0.00000000e+00j, -0.53332494 +4.64289256e-01j],
[ 0.53332494 +4.64289256e-01j, 0.70710678 -8.38231384e-18j]])

特征值应该是 D 数组中的特征值。

为什么这两个例子的特征值不同?我是不是误会了什么?

编辑:更正拼写错误并重新计算。

编辑:我使用的是 Octave 3.8.2。在 Mac OS X 10.10.3 中。

最佳答案

我想我明白发生了什么。 Scipy 可能提供了正确的特征值。 Octave accepts a second matrix in its eig() function但没有具体说明它的作用。 Matlab's documentation确实说这是针对广义特征值问题,但在 Octave 中添加第二个矩阵似乎对特征值没有影响。这看起来像是 Octave 中的错误。

关于python - Scipy.linalg.eig() 给出与 GNU Octave 的 eig() 不同的特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327630/

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