Matrix 如何校正任意复矩阵的julia特征向量

Matrix 如何校正任意复矩阵的julia特征向量,matrix,julia,Matrix,Julia,当我计算某种矩阵的特征向量时,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.957610

当我计算某种矩阵的特征向量时,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做了计算,它没有给我零

如何消除这种行为?

更新:鉴于OP没有澄清,我将把这个问题标记为完全重复的问题,并投票结束

你说:很明显,这依赖于虚部,否则特征向量的每个虚部中的零都不会出现

我不知道那是什么意思

但是,您在问题中提供的所有数字在我看来都是正常和正确的,即典型的行为

请记住,特征向量仅在正交变换之前是唯一的,因此任何软件都需要选择一条规则来缩放特征向量函数的输出。Mathematica使用与大多数其他软件不同的规则,这在过去让许多用户感到困惑。例如,如果你有Matlab,你会注意到它提供了你在问题中描述的精确输出。在这个例子中,Julia的行为与Matlab相似,而不是Mathematica

想一想,我之前已经回答了这个关于Matlab/Mathematica的问题。看见我认为这是一个重复的问题,但可能需要等待您的答复,然后才能将其标记为重复问题。有可能我误解了你的意思。

更新:由于OP没有澄清,我将把这个问题标记为完全重复的问题,并投票结束

你说:很明显,这依赖于虚部,否则特征向量的每个虚部中的零都不会出现

我不知道那是什么意思

但是,您在问题中提供的所有数字在我看来都是正常和正确的,即典型的行为

请记住,特征向量仅在正交变换之前是唯一的,因此任何软件都需要选择一条规则来缩放特征向量函数的输出。Mathematica使用与大多数其他软件不同的规则,这在过去让许多用户感到困惑。例如,如果你有Matlab,你会注意到它提供了你在问题中描述的精确输出。在这个例子中,Julia的行为与Matlab相似,而不是Mathematica


想一想,我之前已经回答了这个关于Matlab/Mathematica的问题。看见我认为这是一个重复的问题,但可能需要等待您的答复,然后才能将其标记为重复问题。有可能我误解了您的想法。

通过扩展科林的探索和我对它的评论,这里有一个函数可以帮助将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给出的结果。是吗?

通过扩展科林的探索和我对它的评论,这里有一个函数可以帮助将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给出的结果。它是唯一的吗?

…直到膨胀变换乘以对角矩阵。膨胀可以通过复因子,始终允许每个向量列的至少一个条目的虚部为零,并且当多个特征值相同时,a.k.a具有更高的多重性,则在选择每个特征值的子空间上的特征向量正交变换时有更大的自由度,并且这样…唯一,直到膨胀变换乘以a对角线矩阵。膨胀可以由一个复杂的因素决定,始终允许每个向量列的至少一个条目的虚部为零,并且当多个特征值相同时,即a.k.a具有更高的多重性,则在为每个特征值选择子空间上的特征向量正交变换时有更大的自由度,以及可能重复的特征向量