R和MATLAB返回不同的特征向量

时间:2015-12-26 22:54:33

标签: r matlab eigenvector

我遗漏了一些明显的东西,但是这里有:

R

dput(M)
structure(c(-2.77555756156289e-16, 9.63770703841896e-16, 0, 9.63770703841896e-16, 
10.6543192562307, 4.11228781751498e-14, 0, 4.11228781751498e-14, 
275.591724761168), .Dim = c(3L, 3L), .Dimnames = list(c("", "", 
""), c("", "", "")))

#thus M is

 -2.775558e-16 9.637707e-16 0.000000e+00
  9.637707e-16 1.065432e+01 4.112288e-14
  0.000000e+00 4.112288e-14 2.755917e+02

eig(M)
$values
[1]  2.755917e+02  1.065432e+01 -2.775558e-16

$vectors
             [,1]         [,2] [,3]
[1,] 5.428099e-34 9.045822e-17    1
[2,] 1.552173e-16 1.000000e+00    0
[3,] 1.000000e+00 0.000000e+00    0

但在MATLAB

[vv,ee] = eig(M)
% hand-copied so ignore the precision)
vv = 
   1.0    -0.    -0.
   0      0      -1
   0      -1     0

ee = 
 %diagonals only
0.0    275.59   10.6543

特征值与abs(vv) == 1的位置匹配,但我不明白的是为什么有些特征向量在MATLAB中是负的而在R中不是。 它有很大的不同,因为我正在尝试移植this MATLAB package,(特别是parabolafit_direct.m和`parabolafit_directm.m')并且后续算法对值的符号敏感。我检查过,MATLAB软件包确实产生了正确的拟合输出(抛物线曲线到数据集),而我的R端口没有,因为这些符号差异。

那么,为什么差异,我该怎么做才能修改我的R代码以获得所需的数据标志?

编辑:我继续深入研究代码,看看这两个“负一”值是否在下一组方程中被取消,但还没有看到。

1 个答案:

答案 0 :(得分:1)

大多数重要信息都在Andras Deak的评论中。总结一下:正如我们都应该知道的那样,特征值和特征向量只有乘法常数才是唯一的。虽然在这种特殊情况下trueR碰巧有不同的符号,但对特征向量的所有后续矩阵运算将产生相同的结果(同样,在符号或常数值内)。

在我的特定情况下,最终结果基本上是:一个答案是MATLAB,另一个答案是a*x -b =0