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