python - 当至少有一个特征值退化点时,为什么 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 都显示了这一点):
解决方案
推荐阅读
- python - 熊猫在时间序列中丢弃少于 x 观察的行
- python - 如何在 tkinter 画布中为闭合的折线着色?
- angular - Angular8 - 在产品中的两个模块之间切换
- python - 无法找到并回答的python语法错误
- html - Django 从地址栏获取 URL
- c# - C# - ODBC 连接失败
- c++ - C/C++ 中的全局调用栈基础
- windows-10 - 如何通过 USB 将自定义按钮板连接到 PC?
- django-rest-framework - Django rest_framework 没有序列化关系
- r - 如何在嵌套数据框中执行pairwise.t.test