当我计算某种类型矩阵的特征向量时,我对julia给我的特征向量有一些问题:
[-3.454373366796186+1.0*im -0.25350955594231006 0.08482455312233446 0.5677952929872186 0.8512642461184345 -3.3973836853171955
-0.25350955594231006 -4.188304472566067 -0.7536261600953561 -0.2208291476393107 -0.9576102121737481 0.7295909738153196
0.08482455312233446 -0.7536261600953561 -4.145281297093087 0.40094370842599164 -0.3177721876030173 -1.1267847565490017
0.5677952929872186 -0.2208291476393107 0.40094370842599164 -2.561932209885087 0.40874651002530255 -0.5972057181377701
0.8512642461184345 -0.9576102121737481 -0.3177721876030173 0.40874651002530255 -4.22394564475772 -0.6957268391716376
-3.3973836853171955 0.7295909738153196 -1.1267847565490017 -0.5972057181377701 -0.6957268391716376 -3.4158987954939084+1.0*im]
(矩阵应该是埃尔米特,除了元素(1,1)和(6,6)。
它的特征向量是:实部
[[-0.60946085 0.66877065 -0.10826958 -0.253947 0.30520429 0.02194697]
[ 0.20102357 -0.07276538 0.60248336 -0.07765244 0.71609468 -0.24683536]
[-0.18741272 0.21271718 0.48641162 0.11191183 -0.52801356 -0.62029698]
[-0.26210071 -0.0094668 -0.07383844 0.91999668 0.22550855 -0.0102918 ]
[-0.23182113 -0.02787858 0.61634939 0.03726956 -0.20443225 0.72225431]
[ 0.64708605 0.70447722 0.04021026 0.22014373 -0.06068686 0.16822489]]
虚构部分
[[ 0.00680416 0.01172969 0.0036139 -0.00816376 0.02468384 -0.05604585]
[ 0.04974942 0.00719276 -0.01608118 0.09895638 0. -0.01326765]
[-0.04007749 -0.06932898 0.01283773 -0.06201991 -0.01329243 0.00324368]
[-0.07372251 0.00715689 0.0038056 0. -0.09608138 0.01970827]
[-0.04798741 -0.00062382 0. -0.07323346 0.03896021 0. ]
[ 0. 0. 0.03589898 0.04052119 -0.08599638 -0.00702559]]
显然存在对虚部的依赖,否则在特征向量的每个虚部中都不会出现零。我之所以知道这部分原因是因为我在mathematica中进行了计算,它并没有给我零。
如何清除此类行为?
答案 0 :(得分:3)
通过扩展科林的探索(以及我对它的评论),这里有一个函数可以帮助将Julia / Matlab的结果转换为Mathematica结果:
matlab2mathematica(m) = m/Diagonal(vec(m[end,:]))
它只是使用自由选择任意倍数的特征向量,并仍然跨越相同的空间。
在OP中的矩阵上,这给出了:
# m2 is the matrix from OP
real(matlab2mathematica(m2)) =
6x6 Array{Float64,2}:
-0.941854 0.949315 -1.45368 -1.12235 -1.86352 0.144124
0.31066 -0.10329 8.13901 -0.261148 -3.92277 -1.46145
-0.289626 0.30195 6.89 0.441542 2.99565 -3.68169
-0.405048 -0.0134381 -0.974822 4.04212 -0.489495 -0.0659565
-0.358254 -0.0395734 8.52958 0.104523 0.817448 4.28591
1.0 1.0 1.0 1.0 1.0 1.0
imag(matlab2mathematica(m2)) =
6x6 Array{Float64,2}:
-0.0105151 -0.0166502 -1.38769 -0.169504 -2.23397 0.327141
-0.0768822 -0.0102101 7.66628 -0.497577 -5.55877 0.139903
0.0619353 0.098412 5.832 0.362998 4.02595 0.134477
0.11393 -0.0101592 -0.964946 0.744021 -2.27687 -0.1144
0.0741592 0.000885503 7.61505 0.351901 1.80035 -0.178993
-0.0 -0.0 -5.55112e-17 -0.0 5.55112e-17 -0.0
这可能是Mathematica给出的。是吗?
答案 1 :(得分:2)
更新:鉴于OP缺乏澄清,我将把这个问题标记为完全重复并投票决定。
你说:“很明显存在对虚部的依赖,否则特征向量的每个想象部分中的零都不会出现。”
我不确定这意味着什么。
但是,您在问题中提供的所有数字对我来说都是正常和正确的,即典型行为。
请记住,特征向量仅在正交变换时才是唯一的,因此任何软件都需要选择规则来扩展特征向量函数的输出。 Mathematica对大多数其他软件使用不同的规则,这在过去使许多用户感到困惑。例如,如果您有Matlab,您会注意到它提供了您在问题中描述的输出。所以Julia在这个例子中表现得像Matlab,而不是Mathematica。
想想看,我之前就Matlab / Mathematica回答了这个问题。见here。我认为这个问题是重复的,但在标记之前可能会等待您的回复。我可能误解了你想要的东西。