2015-08-24 29 views
20

Ho una matrice sparse molto grande che rappresenta un martix di transizione in una catena di Markov, cioè la somma di ogni riga della matrice è uguale a uno e sono interessato a trovare il primo autovalore e il suo vettore corrispondente che è più piccolo di uno. So che gli autovalori sono limitati nella sezione [-1, 1] e sono tutti reali (non complessi).
Sto cercando di calcolare i valori usando la funzione python scipy.sparse.eigs, tuttavia, uno dei parametri delle funzioni è il numero di autovalori/vettori da stimare e ogni volta che ho aumentato il numero di parametri da stimare, il numero di autovalori che sono esattamente uno cresciuto pure.
Inutile dire che sto usando il parametro which con il valore 'LR' per ottenere gli autovalori k più grandi, dove k è il numero di valori da stimare.
Qualcuno ha un'idea di come risolvere questo problema (trovare il primo autovalore più piccolo di uno e il suo vettore corrispondente)?Calcolo di valori autovalori di matrici sparse molto grandi in python

+0

Potrebbe essere necessario studiare la documentazione per il codice ARPACK sottostante. – hpaulj

+0

@hpaulj, l'ho già fatto, non ha aiutato molto –

+0

Hai capito il problema, e la matrice, abbastanza bene da sapere se ci sono più 'eigs' con questo valore? In altre parole, si tratta di una proprietà reale della matrice o di un errore nel codice? – hpaulj

risposta

1

Sono d'accordo con @pv. Se la tua matrice S era simmetrica, potresti vederla come una matrice laplaciana della matrice I - S. Il numero di componenti connessi di I - S è il numero di zero-autovalori di questa matrice (vale a dire, la dimensione dello spazio associato all'autovalore 1 di S). È possibile controllare il numero di componenti connessi del grafico la cui matrice di similarità è I - S*S' per un inizio, ad es. con scipy.sparse.csgraph.connected_components.

+0

e cosa faccio se la matrice non è simmetrica? –