Ecco alcuni esempi di utilizzo del metodo delle potenze:
Proviamo innanzitutto che l'algoritmo funziona: lo proviamo cioè su una matrice di cui conosciamo lo spettro, per esempio una matrice diagonale: gli autovalori sono infatti gli elementi sulla diagonale.
» A A = 20 0 0 0 5 0 0 0 3 » [l,i]=potenze(A, rand(3,1), 10e-15, 2000) l = 20.00000000000000 i = 14 »
Chiaramente l'autovalore dominante era l'elemento con valore 10; l'algoritmo è riuscito a trovare questo elemento in 14 passi e con la precisione richiesta.
La prova successiva consiste in una matrice i cui elementi sono interi, ma scelti casualmente:
» A A = 45 2 9 0 0 9 8 50 1 2 3 4 6 9 1 3 » [l,i]=potenze(A, rand(4,1), 10e-15, 2000) l = 46.05467285995372 i = 55 » eig(A) ans = 46.05467285995431 -15.19630313772274 26.92844782249211 2.21318245527628 »
Vista la casualità della matrice per avere una riprova che l'algoritmo trovasse effettivamente l'autovalore di modulo massimo, si è utilizzato il comando ``eig'' che Matlab fornisce per il calcolo dello spettro di una matrice; come si vede il metodo delle potenze trova una buona approssimazione dell'autovalore dominante. Si tenga anche presente che il numero di passi necessari per avere una soluzione e la precisione di questa dipendono dal vettore iniziale: essendo scelto casuale questi valori possono cambiare, a volte anche in modo rilevante.
Naturalmente il metodo delle potenze funziona anche in caso di matrici e vettori iniziali complessi, come si nota nel seguente esempio:
» A A = 10 0 0 0 0 3 0 0 0 0 0 + i 0 0 0 0 0 - i » [l,i]=potenze(A, rand(4,1)+i*rand(4,1), 10e-15, 2000) l = 10.00000000000000 i = 16 »
Abbiamo provato un semplice esempio di una matrice diagonale con elementi complessi, ed anche il vettore casuale di partenza è stato scelto complesso.
Proviamo adesso un caso in cui l'algoritmo non converge:
» A A = 4 141 -576 432 1 0 0 0 0 1 0 0 0 0 1 0 » [l,i]=potenze(A, rand(4,1), 10e-15, 2000) l = 3.09646771834061 i = 2000 » eig(A) ans = -12.00000000000000 12.00000000000000 3.00000000000000 1.00000000000000 »
Osservando l'output del comando ``eig'' ci accorgiamo subito dove risiede il problema: ci sono due autovalori che hanno modulo massimo; in questo caso ``potenze'' impiega tutte le iterazioni concesse senza raggiungere un'approssimazione accettabile. Questo è dovuto al fatto che durante la costruzione dell'algoritmo avevamo supposto che esistesse uno ed un solo autovalore dominante, qui ce ne sono due e l'algoritmo non riesce a convergere. Un'altra cosa da notare è la forma della matrice che abbiamo utilizzato per quest'ultimo test: una matrice siffatta si chiama matrice di compagnia e vedremo tra poco come si possono costruire matrici di questo tipo.
Morpheus 2004-01-04