MERCREDI 25 MARS 2015 WILLIAM CHRISTIE

Algebra Lineare Numerica
Esercitazione n◦ 10
• Esercizio 1
1. Scrivere una function QRshift che implementi il metodo QR con shift dato.
2. Scrivere una funzione T = tridiag(A) che riduce una matrice A m × m reale simmetrica a forma tridiagonale usando trasformazioni di similitudine ortogonali. Si
consiglia di aggiungere una riga che forzi la matrice in output T ad essere esattamente tridiagonale simmetrica, dato che potrebbe non esserlo a causa di errori di
arrotondamento. Per esempio, si testi la function con A =hilb(4).
3. Applicare la funzione Tnew = QRshift(T), che calcola l’algoritmo QR senza shift, ad
una matrice reale tridiagonale T . Se necessario, forzare simmetria e tridiagonalit`a
ad ogni passo. Terminare l’iterazione quando l’elemento (m, m − 1) di Tnew soddisfa
|tm,m−1 | < 10−12 .
4. Scrivere un programma pilota che i) chiama tridiag, ii) chiama QRshift per trovare
(k)
un autovalore, con shift pari a zero, con shift del quoziente di Rayleigh tmm e con
shift di Wilkinson. Applicare il codice a A =hilb(4).
• Esercizio 2
Si scriva un programma che calcoli tutti gli autovalori di una matrice A, n × n, con il
metodo QR attraverso una strategia di deflazione. Un possibile schema di tale programma
`e il seguente:
1. si riduca la matrice A in forma di Hessenberg;
2. si chiami QRshift, con shift pari a zero, per trovare un autovalore;
3. si richiami QRshift su una matrice di dimensione (m × m) pi`
u piccola di una unit`a
(deflazione) per trovare un altro autovalore e cos`ı via (per m decrescente come n,
n-1, ..., 3,2), fino a trovare tutti gli autovalori.
Ad ogni iterazione QR si salvino i valori di |tm,m−1 | in un vettore, in modo che alla fine il
programma generi un grafico con semilogy di tali valori. Si testi il codice per A =hilb(4).
L’output sar`
a l’insieme degli autovalori e il grafico dei |tm,m−1 |.
Si ripeta l’esercizio effettuando lo shift del quoziente di Rayleigh e di Wilkinson.
Algebra Lineare Numerica
Lab nr. 10
• Exercise 1
1. Write a function QRshift in order to find the eigenvalue with the largest absolute
value.
2. Write a function T = tridiag(A) that reduces a real symmetric m × m matrix A
to tridiagonal form by orthogonal similarity transformations. Your output matrix T
should be symmetric and tridiagonal up to rounding errors. If you like, add a line
that forces T at the end to be exactly symmetric and tridiagonal. For an example,
apply your program to A =hilb(4)
3. Write a function Tnew = QRshift(T) that runs the unshifted QR algorithm on a real
tridiagonal matrix T . Again, you may wish to enforce symmetry and tridiagonality
at each step. Your program should stop and return the current tridiagonal matrix
when (m, m − 1) element of Tnew satisfies |tm,m−1 | < 10−12 .
4. Write a program i) calls tridiag, ii) calls QRshift in order to find only one eigenvalue,
with shift equals to zero, shift of the Rayleigh quotient and the Wilkinson shift. Apply
your program to A =hilb(4).
• Exercise 2
Write a program that computes all the eigenvalues of a given n × n matrix A, by the QR
method using a deflation algorithm, following these steps:
1. reduce A in Hessenberg form;
2. call QRshift, with no shift, in order to find one eigenvalue;
3. call again QRshift with a smaller matrix (m × m) to get another eigenvalue and so
on until all of the eigenvalues of A are determined, (for m=n:-1:2).
Set things up so that the values of |tm,m−1 | at every QR iteration are stored in a vector
and so that at the end, your program generates a semilogy plot of these values. Run your
program for A =hilb(4). The output should be a set of eigenvalues and a sawtooth plot.
Repeat the exercise with the shift of the Rayleigh quotient and with the Wilkinson shift.
2