微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

沿着轨迹的复杂参数的预期行为,没有任何重复的特征值(当特征值在任何地方都是唯一的时,Python 和 MATLAB 都显示了这一点):

enter image description here

使用 a9 =/= b9np.unwrap 时观察到的行为:

enter image description here

使用 numpy.linalg.eig AND scipy.linalg.eig 时观察到的行为 - 不应该有跳转

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。