2014-07-15 15 views
6

szukam rozwiązania problemu typu: Aw = xBw gdzie x jest skalarna (wartość własna), w jest wektorem własnym, a A i B są symetryczne, kwadratowe macierze numpy równego wymiaru. Powinienem znaleźć pary d x/w jeśli A i Bd x d. Jak rozwiązać to w numpy? Szukałem w dokumentach Scipy i nie znajdowałem niczego, co chciałem.Numpy: Uogólnione zagadnienie własne

+0

Sprawdź http://stackoverflow.com/questions/12672408/generalized-eigenvectors-in-matlab – emeth

+0

To jest dokładnie to, co chcę zrobić, ale w python. –

Odpowiedz

7

Wydaje trzeba scipy.linalg.eigh() rozwiązać ten uogólnione zagadnienie własne:

from scipy.linalg import eigh 

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

widać, że eigvecs to kompleks ndarray, więc być może trzeba użyć eigvecs.real ...

W tym samym module masz eigvalsh() który prawdopodobnie będzie działać szybciej w Twoim przypadku, ale nie zwraca wektorów własnych.

+0

Dzięki za wyjaśnienie tego! Ten przykład w dokumentach dla tej funkcji był dość niejasny na pierwszy rzut oka. –

6

Czy widziałeś już scipy.linalg.eig? Z documentation:

rozwiązać zwyczajne lub uogólnione zagadnienie własne macierzy kwadratowej.

Metoda ta posiada opcjonalny parametr 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

Problem w OP to 'Aw = xBw'. – emeth

+0

, więc w czym problem? 'scipy.linalg.eig (a, b = Brak, ...': parametr b: _ Macierz po stronie prawej w uogólnionej wartości własnej Wartość domyślna to Brak, zakłada się matrycę tożsamości._ – RomanHotsiy

+0

Hej, dziękuję, widziałem to, ale brakowało części B. –