2015-10-03 10 views
7

ich eine beliebige 2x2-Matrix zu erstellen:Eigenvektoren von numpy.linalg.eig erstellt scheinen nicht korrekt

In [87]: mymat = np.matrix([[2,4],[5,3]]) 

In [88]: mymat 
Out[88]: 
matrix([[2, 4], 
     [5, 3]]) 

Ich versuche Eigenvektoren numpy.linalg.eig mit berechnen:

In [91]: np.linalg.eig(mymat) 
Out[91]: 
(array([-2., 7.]), 
matrix([[-0.70710678, -0.62469505], 
     [ 0.70710678, -0.78086881]])) 

In [92]: eigvec = np.linalg.eig(mymat)[1][0].T 

In [93]: eigvec 
Out[93]: 
matrix([[-0.70710678], 
     [-0.62469505]]) 

I multipliziere einen meiner Eigenvektoren mit meiner Matrix und erwarte, dass das Ergebnis ein Vektor ist, der ein skalares Vielfaches meines Eigenvektors ist.

In [94]: mymat * eigvec 
Out[94]: 
matrix([[-3.91299375], 
     [-5.40961905]]) 

Allerdings ist es nicht. Kann mir jemand erklären, was hier schief läuft?

Antwort

11

Aus der Dokumentation für linalg.eig:

v : (..., M, M) array 
    The normalized (unit "length") eigenvectors, such that the 
    column ``v[:,i]`` is the eigenvector corresponding to the 
    eigenvalue ``w[i]``. 

Sie möchten die Spalten, nicht die Zeilen.

>>> mymat = np.matrix([[2,4],[5,3]]) 
>>> vals, vecs = np.linalg.eig(mymat) 
>>> vecs[:,0] 
matrix([[-0.70710678], 
     [ 0.70710678]]) 
>>> (mymat * vecs[:,0])/vecs[:,0] 
matrix([[-2.], 
     [-2.]]) 
>>> vecs[:,1] 
matrix([[-0.62469505], 
     [-0.78086881]]) 
>>> (mymat * vecs[:,1])/vecs[:,1] 
matrix([[ 7.], 
     [ 7.]]) 
1

Nein, es ist wahr. Numpy funktioniert nicht richtig. Beispiel:

A 
Out[194]: 
matrix([[-3, 3, 2], 
     [ 1, -1, -2], 
     [-1, -3, 0]]) 

E = np.linalg.eig(A) 

E 
Out[196]: 
(array([ 2., -4., -2.]), 
matrix([[ -2.01889132e-16, 9.48683298e-01, 8.94427191e-01], 
     [ 5.54700196e-01, -3.16227766e-01, -3.71551690e-16], 
     [ -8.32050294e-01, 2.73252305e-17, 4.47213595e-01]])) 

A*E[1]/E[1] 
Out[205]: 
matrix([[ 6.59900617, -4.  , -2.  ], 
     [ 2.  , -4.  , -3.88449298], 
     [ 2.  , 8.125992 , -2.  ]]) 
Verwandte Themen