2014-07-15 17 views
6

Ich suche ein Problem der Art zu lösen: Aw = xBw wo x ein Skalar (Eigenwert), w ein Eigenvektor und A und B sind symmetrisch, quadratisch numpy Matrizen gleicher Dimension. Ich sollte d x/w Paare finden können, wenn A und Bd x d sind. Wie würde ich das in numpy lösen? Ich schaute in die Scipy Docs und fand nichts, was ich wollte.Numpy: verallgemeinerten Eigenwert Problem

+0

Überprüfen Sie http://StackOverflow.com/Questions/12672408/generalized-eigenvectors-in-Matlab – emeth

+0

Das ist genau das, was ich tun möchte, aber in Python. –

Antwort

7

Es Sie scipy.linalg.eigh() lösen müssen diese verallgemeinerte Eigenwertproblem scheint:

from scipy.linalg import eigh 

eigvals, eigvecs = eigh(A, B, eigvals_only=False) 

Sie werden sehen, eigvecs ist ein komplexes ndarray, so vielleicht müssen Sie eigvecs.real ...

Im selben Modul Sie eigvalsh() haben benutzen, die wahrscheinlich schneller für Ihren Fall durchführen würde, aber nicht die Eigenvektoren zurück.

+0

Danke für die Klärung! Das Beispiel in der Dokumentation für diese Funktion war auf den ersten Blick ziemlich unklar. –

6

Haben Sie scipy.linalg.eig gesehen? Vom documentation:

Lösen Sie einen gewöhnlichen oder Eigenwertproblem einer quadratischen Matrix verallgemeinert.

Diese Methode haben optionale Parameter b:

scipy.linalg.eig(a, b=None, ... 
b : (M, M) array_like, optional 
Right-hand side matrix in a generalized eigenvalue problem. 
      Default is None, identity matrix is assumed. 
+0

Das Problem in OP ist 'Aw = xBw'. – emeth

+0

Also, was ist das Problem? 'scipy.linalg.eig (a, b = None, ...': Parameter b: _Right-Hand-Seitenmatrix in einem verallgemeinerten Eigenwertproblem. Standard ist None, Identitätsmatrix wird angenommen._ – RomanHotsiy

+0

Hey danke. Ich habe das gesehen, aber verpasste den B-Teil. –