2012-07-27 3 views
3

I가 다음과 같은 행렬 시그마와 sigmad :matlab에 VS 파이썬 - EIG (A, B) sc.linalg.eig VS (A, B)

시그마 :

1.9958 0.7250 
    0.7250 1.3167 

sigmad :

내가 파이썬에서 일반화 된 고유 값 문제를 해결하려고하면
4.8889 1.1944 
    1.1944 4.2361 

내가 얻을 :

d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma)) 

V :

-1  -0.5614 
    -0.4352 1 

나는 g를 해결하려고합니다. 이자형. MATLAB에서 문제는 내가 얻을 :

[V,d]=eig(sigmad,sigma) 

V :

-0.5897 -0.5278 
    -0.2564 0.9400 

그러나 D' s이 (가) 일치 않습니다. 나는 이것이 극도로 이상하다고 생각하지만, 어떤 일이 일어나고 있는지 아는 사람이 있습니까? 이것에 대한 당신의 도움에 감사드립니다!

답변

10

고유 벡터의 모든 (0이 아닌) 스칼라 배수도 고유 벡터가됩니다. 방향 만이 의미있는 것이지 전체적인 정규화는 아닙니다. 다른 루틴은 다른 규칙을 사용합니다. 보통 1로 설정된 절대 값 또는 1 또는 -1로 설정된 최대 값을 볼 수 있으며 일부 루틴은 성능상의 이유로 내부적으로 일관성이 없습니다. 귀하의 두 가지 결과는 서로의 배수입니다.

In [227]: sc = array([[-1., -0.5614], [-0.4352, 1. ]]) 

In [228]: ml = array([[-.5897, -0.5278], [-0.2564, 0.94]]) 

In [229]: sc/ml 
Out[229]: 
array([[ 1.69577751, 1.06366048], 
     [ 1.69734789, 1.06382979]]) 

이며 실제로는 동일한 고유 벡터입니다. 행렬을 벡터를 변경하는 연산자로 생각하십시오. 고유 벡터는 그 방향을 가리키는 벡터가 행렬에 의해 비틀어지지 않는 특수한 방향이며 고유 값은 행렬이 벡터를 확대 또는 축소하는 정도를 측정하는 요소입니다.