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
© Copyright 2024 Paperzz