Corso di Laurea Triennale in Matematica Laboratorio di Calcolo Numerico
A.A. 2007/2008 – II semestre
Esercitazione 4
Creare una cartella <cognome> dove verranno salvati i file creati nella sessione di lavoro.
Appena entrati in MATLAB posizionarsi in <cognome>.
Risolvere in ambiente MATLAB i seguenti esercizi.
1. Scrivere una function MATLAB per risolvere il sistema lineare Ax=b mediante il metodo iterativo di Gauss-Seidel. Tale function deve essere chiamata con il nome gseidel.m e deve assumere come dati di ingresso:
- la matrice dei coefficienti del sistema - il vettore dei termini noti
- il vettore contenente l'approssimazione iniziale della soluzione - il parametro di tolleranza per l’errore.
In uscita devono essere restituiti il vettore soluzione del sistema lineare e il numero dei passi effettuati per ottenere l'approssimazione desiderata (massimo 100).
2. Scrivere una function MATLAB per risolvere il sistema lineare Ax=b mediante il metodo iterativo di Jacobi. Tale function deve essere chiamata con il nome jacobi.m e deve assumere come dati di ingresso:
- la matrice dei coefficienti del sistema - il vettore dei termini noti
- il vettore contenente l'approssimazione iniziale della soluzione - il parametro di tolleranza per l’errore.
In uscita devono essere restituiti il vettore soluzione del sistema lineare e il numero dei passi effettuati per ottenere l'approssimazione desiderata (massimo 100).
3. Calcolare i raggi spettrali delle matrici di iterazione dei metodi di Jacobi e Gauss-Seidel associate ai sistemi lineari Ax=b con
−
−
−
=
2 1 1
2 2 2
1 1 2
A
= 3 1 2
b ;
−
−
−
−
−
=
1 2 2
1 1 1
2 2 1 A
−
= 3
1 1
b ;
−
−
−
=
6 8 0
0 9 2
1 1 4
A
−
= 14
7 6
b ;
−
−
−
=
8 3 7
4 5 4
9 6 7 A
−
= 2 5 22
b ;
e=rand(n,1); f=[e, -e, 6*e, -e, 2*e]; d=[-n/2 -1 0 1 n/2];
A=spdiags(f,d,n,n), x = ones(n,1), b = A*x , per n = 10,100,1000.
Stabilire per ognuno di questi sistemi che cosa ci si aspetta da entrambi i procedimenti iterativi.
Successivamente, servirsi degli M-file gseidel.m e jacobi.m per risolvere i sistemi lineari assegnati con i due metodi a partire dal vettore iniziale x(0)=0, con parametro di tolleranza per l’errore tol=10-6.
4. Applicare il metodo di Jacobi per risolvere il sistema lineare Ax=b con
−
−
=
1 1 1
2 13 2
1 2 20 A
= 2 30 25
b ,
a partire dal vettore iniziale x(0)=0, con parametro di tolleranza per l’errore tol=10-6. Permutare le prime due equazioni e considerare il sistema equivalente Ax=b con
−
−
=
1 1 1
1 2 20
2 13 2 A
= 2 25 30 b
e riapplicare il metodi di Jacobi. Cosa accade?
5. Si implementi una function MATLAB per risolvere il sistema lineare Ax=b attraverso il metodo del gradiente. Si scelga un criterio di arresto basato sull’errore relativo tra due soluzioni successive, fino al raggiungimento di un numero massimo fissato di iterazioni.
6. Sia assegnato il sistema lineare Ax=b con
2 R( 1)x( 1)
2 1 0
1 2 1 0
0 1 2 1 0
0 0
1 2 1 0
0 0
1 2 1
0 0
1 2
1 − −
∈
−
−
−
−
−
−
−
−
−
−
= n n
h A
L L
L L
L L
M O
O O M
M O
O O M
L L
L L
L L
R 1
2
0 0 1
∈ −
= n
h
b
M M
dove h=1/n per n=23, 24,…, 28. Si risolva il sistema con il metodo del gradiente ponendo nmax=106, tol=10-12, x(0)=0. Si disegni in scala logaritmica il numero di iterazioni al variare di n. Che andamento si osserva? Perché?
7. Si risolva il sistema lineare assegnato nell’esercizio 6. con il metodo del gradiente coniugato.
A questo scopo si usi la function MATLAB pcg. Si digiti help pcg per le informazioni sull’utilizzo di tale funzione. Cosa si può dire a priori sul numero di iterazioni?