我正在尝试在 Mathematica 和 Matlab 中创建相同的输出,但是在将特征向量与特征值对齐时遇到了麻烦,我认为 Matlab 做的事情比我预期的稍微复杂一些(排序/排序)。
使用 Mathwork 网站上的示例,对于[V,D] = eig(A).
http://www.mathworks.co.uk/help/matlab/ref/eig.html#btifddh-2
TestMatrix = {{1, 2, 3}, {3, 1, 2}, {2, 3, 1}}
[V,D] = eig(A)
V =
-0.5774 + 0.0000i, 0.2887 - 0.5000i, 0.2887 + 0.5000i,
-0.5774 + 0.0000i, -0.5774 + 0.0000i, -0.5774 + 0.0000i,
-0.5774 + 0.0000i, 0.2887 + 0.5000i, 0.2887 - 0.5000i,
D =
6.0000 + 0.0000i, 0.0000 + 0.0000i, 0.0000 + 0.0000i,
0.0000 + 0.0000i, -1.5000 + 0.8660i, 0.0000 + 0.0000i,
0.0000 + 0.0000i, 0.0000 + 0.0000i, -1.5000 - 0.8660i,
但是在 Mathematica 中运行它,我收到以下特征向量
m = N[Eigensystem[TestMatrix]]
DV = DiagonalMatrix[m[[1]]]
Vec=N[Eigenvectors[TestMatrix]]
Vec={
{1., 1., 1.},
{-0.5 - 0.866025 I, -0.5 + 0.866025 I, 1.},
{-0.5 + 0.866025 I, -0.5 - 0.866025 I, 1.}}
这是完全可以接受的,我现在只想将两个向量变成相同的形式。注意对角矩阵匹配,但是我似乎无法重新创建 V。
通过阅读 Matwork 示例,V 是右特征向量。在这种情况下,形式 [V,D] = eig(A) 返回矩阵 V,其列是 A 的右特征向量,使得 A V = V D。 & V 中的特征向量被归一化,使得每个的 2 范数是 1。
试图标准化 Vec,现在在数学中,我无法重新创建在 Matlab 中获得的结果。显然我做错了什么,这是我有点迷失的地方。我已经尝试了 Matlab 中描述的 '2-norm' 函数,以及 Normalize 函数,后者似乎好一点,但与 matlab 示例中的结果相比仍然不正确。
有人可以解释我在哪里出错了,或者只是如何在数学中重新创建相同的结果。
这是我的(......我假设......)不正确的尝试。
首先使用标准化。
TestMatrix = {{1, 2, 3}, {3, 1, 2}, {2, 3, 1}}
vec = N[Eigenvectors[TestMatrix]]
Table[Normalize[vec[[i]]], {i, 1, Length[vec]}]
{{0.57735, 0.57735, 0.57735},
{-0.288675 - 0.5 I, -0.288675 + 0.5 I, 0.57735 + 0. I},
{-0.288675 + 0.5 I, -0.288675 - 0.5 I, 0.57735 + 0. I}}
这与 Matlab 输出 V 非常接近,除了矩阵似乎已被转置,时间为负数,以及第二个和第三个特征值如何切换(比较特征值和向量列)显然出了点问题,我可能不应该使用 Normalise。
但是,我使用 Norm(p,2) 的尝试与最终结果相去甚远。
我看到另一个涉及该主题但并没有真正帮助的线程。 https://stackoverflow.com/questions/5648975/matlab-vs-mathematica-eigenvectors
有谁能解释一下吗?