2012-07-27 71 views
3

我有以下矩陣西格瑪和sigmad:Matlab的VS的Python - EIG(A,B)VS sc.linalg.eig(A,B)

西格瑪:

1.9958 0.7250 
    0.7250 1.3167 

sigmad:

4.8889 1.1944 
    1.1944 4.2361 

如果我試圖解決在Python的廣義特徵值問題我獲得:

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

V:

-1  -0.5614 
    -0.4352 1 

如果我試圖解決g。即在MATLAB的問題,我得到:

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

五:

-0.5897 -0.5278 
    -0.2564 0.9400 

但D的不重合。我覺得這很奇怪,有人知道發生了什麼嗎?感謝您對此的幫助!

回答

10

任何(非零)特徵向量的標量倍數也將是一個特徵向量;只有方向有意義,而不是整體正常化。不同的例程使用不同的約定 - 通常您會看到幅度設置爲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]]) 

所以它們實際上是相同的特徵向量。將矩陣看作是改變向量的運算符:特徵向量是特殊方向,其中指向該向量的向量不會被矩陣扭曲,特徵值是衡量矩陣擴展或收縮向量的因素。

相關問題