Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R和MATLAB返回不同的特征向量_R_Matlab_Eigenvector - Fatal编程技术网

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

R和MATLAB返回不同的特征向量,r,matlab,eigenvector,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

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

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中不是负的。
这有很大的不同,因为我正在尝试移植,(特别是,
parabolafit_direct.m
和'parabolafit_directm.m'),后续算法对值的符号很敏感。我检查了,MATLAB包确实生成了正确的拟合输出(抛物线到数据集),而我的R端口没有,因为这些符号差异

那么,为什么会有这种差异?我可以做些什么来修改我的
R
代码以获得所需的数据符号


编辑:我继续深入代码,看看这两个“负一”值是否在下一组等式中抵消,但还没有看到。

大部分重要信息都在Andras Deak的评论中。总而言之:我们都(应该)知道,特征值和特征向量只有在乘法常数下才是唯一的。虽然在这种特殊情况下,
R
MATLAB
恰好以不同的符号结束,但对特征向量的所有后续矩阵运算将产生相同的结果(同样,在符号或常量内)


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

您确定后续应用的算法依赖于符号吗?对于标量常量,特征向量是未定义的:如果
v
是具有特征值lambda的特征向量,则具有相同特征值的
c*v
。特征值分解代码返回归一化(长度为1)的特征向量,这仍然给您符号自由。
[0 1 0]
[0-1 0]
对您的问题都是同样有效的答案。你需要一个额外的规则来指定你需要从2中得到哪个特征向量(如果笛卡尔单位向量不是特征向量,也就是说,如果矩阵不是对角的),这一点很重要。@AndrasDeak我知道这一部分,但是如果你看一下引用的代码,你会发现算法是加,减,并以多种方式将特征向量矩阵的每个元素相乘。这意味着MATLAB返回的符号取决于特征向量的符号。通过在函数
parabolafit_directM
中选取后续方程的最小根来选择特征值。这真的很奇怪。我只是说,任何算法都不应该天生依赖于这些符号。如果你的特征向量指向所有地方呢?比如说在5d空间?如果这是一个具体的3d问题,那么可能会有一些额外的约束……但正如我看到的,两组特征向量的利手性是相同的(都是左手的)。我的意思是,如果您的结果实际上是不同的(而不是相当好的不同),那么可能在某个地方有一个bug(在移植或原始版本中)。考虑到
%?
是引用代码中的一个注释,这是很有可能的。@AndrasDeak是的,事实上,它确实“在清洗中”出来。在所有
Kappa
s,k,t,theta,p
计算的最后,(当然,在我的代码转换中有一个非常愚蠢的错误)在
R
MATLAB
中返回相同的系数向量,尽管带有全局符号变化——这不会影响抛物线本身。谢谢你的建议。@AndrasDeak如果你想发表你的评论作为回答,请点击广告。如果没有,我会引用更多关于我具体情况的信息,这样我就可以结束这个问题。