Sto cercando di risolvere un problema del tipo: dove Aw = xBw
x
è uno scalare (autovalore), w
è un autovettore e A
e B
sono simmetriche, matrici NumPy quadrati di uguale dimensione. Dovrei essere in grado di trovare coppie d
x/w se A
e B
sono d x d
. Come risolverei questo in numpy? Stavo guardando i documenti di Scipy e non trovavo nulla di simile a ciò che volevo.Numpy: Generalized autovalori Problema
risposta
Sembra necessario scipy.linalg.eigh()
per risolvere questo generalizzato problema agli autovalori:
from scipy.linalg import eigh
eigvals, eigvecs = eigh(A, B, eigvals_only=False)
Vedrete che eigvecs
è un complesso ndarray
, quindi forse è necessario utilizzare eigvecs.real
...
nello stesso modulo hai eigvalsh()
che probabilmente eseguire più veloce per il vostro caso, ma non restituisce gli autovettori.
Grazie per averlo chiarito! L'esempio dei documenti relativi a questa funzione non era chiaro a prima vista. –
Hai visto scipy.linalg.eig
? Dalla documentation:
risolvere un ordinario o generalizzate problema autovalore di una matrice quadrata.
Questo metodo ha parametro opzionale 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.
Il problema nell'OP è 'Aw = xBw'. – emeth
quindi, qual è il problema? 'scipy.linalg.eig (a, b = None, ...': parametro b: _Matrice lato destro in un problema di autovalore generalizzato: l'impostazione predefinita è Nessuno, si assume la matrice identità._ – RomanHotsiy
Hey grazie. ma ho saltato la parte B. –
Controlla http://stackoverflow.com/questions/12672408/generalized-eigenvectors-in-matlab – emeth
Questo è esattamente ciò che voglio fare, ma in python. –