首页 > 解决方案 > 当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?

问题描述

对于物理问题,我用方阵数值求解特征值方程(通常是复值,但通过构造保证具有实特征值)。我有一个 2D 参数空间(x,y),我在每个点求解这个方程。然后我取一个特征向量的点积和另一个特征向量的离散时间导数沿着 中的轨迹(x,y)。例如,如果我的矩阵是4 x 4,并且我得到A, B, C, D带有 eigenvalues 的特征向量a, b, c, d,我正在谈论(A).(dB/dt)(通常是复值)。然后我计算它的复杂参数/角度。

只要我的(x,y)点足够接近(即“连续”),并且只要我知道所考虑的每个特征函数的特征值在轨迹上的每个点上都是唯一的(即a =/= b在所有(x,y)制作轨迹时),我就可以期待这个角度也是一个连续的量,没有任何急剧的跳跃(如第一个图所示)。然而,当使用 Numpy/Scipy 时,这种“连续”质量似乎被退化/重复特征值破坏了,即使它不在轨迹上。也就是说,如果我的轨迹包括{(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)},在每个点(即a1 =/= b1, a2 =/= b2, ...a9 = b9处具有唯一的特征值,那么(x9, y9)即使在(x9, y9)不在考虑的轨迹上。我通过改变我的矩阵来推断这一点,以便每个特征函数的特征值在每个点都是唯一的(即我强制a9 =/= b9)。这样做给了我一个“连续”的角度。相反,正如理论上预期的那样,这两种情况在 MATLAB 中都是“连续的”。

似乎问题在于分配给数值特征函数的复杂相位。我曾经np.unwrap对此进行过深入研究(下图最后一个),但效果并不理想。我花了数周时间试图了解原因,但无济于事。任何建议,将不胜感激。

在没有任何重复特征值的情况下,沿轨迹的复杂参数的预期行为(当特征值在任何地方都是唯一的时,Python 和 MATLAB 都显示了这一点): 在此处输入图像描述

使用numpy.linalg.eigor时观察到的行为 scipy.linalg.eig在此处输入图像描述

使用numpy.linalg.eigAND时观察到的行为np.unwrap- 不应该有跳转: 在此处输入图像描述

标签: pythonmatlabnumpyscipyphysics

解决方案


推荐阅读