Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Calcolo Numerico
a.a. 2014-2015
1
Esercizio 1: prova pratica 08/01/2013
Sia dato il sistema lineare Ax=b con:
1
3 2
2 0 0 0
1 3 0 2 0 0
2
2 1
0 6 2 0
3
A
1
0 2 6 0 2
3
1
0 0 2 0 3
2
1
0 0 0 2 3
2
precisione = 10-11;
• calcoli in norma infinito, l’errore assoluto commesso dal
metodo di Cholesky e da quello iterativo ad ogni
iterazione;
• faccia visualizzare una tabella, costituita da due righe,
4 la
Seguito testo
prima relativa ai risultati ottenuti con il metodo di
Cholesky, la seconda relativa al metodo SOR.
La tabella riporti l’intestazione:
n soluzione errore
n indica la stima del numero di operazioni necessarie per
calcolare la soluzione approssimata con ognuno dei due
metodi, soluzione ed errore sono la soluzione
approssimata ed il corrispondente errore assoluto.
Si utilizzino i seguenti formati di stampa: 3 cifre intere
per il numero di operazioni, 10 cifre decimali e formato
fixed point per la soluzione approssimata, 2 cifre
decimali e formato floating point per l’errore. 5
Ultimo quesito e risoluzione
C - Si commentino i risultati.
Risoluzione.
A- Esaminiamo le caratteristiche della matrice.
La matrice è simmetrica, a diagonale strettamente
dominante per righe, con elementi >0 sulla diagonale
principale (ricordiamo che quest’ultima condizione è solo
C. N.)
quindi: Matrice simmetrica e definita positiva!!!
A =
3.0000 0.5000 2.0000 0 0 0
0.5000 3.0000 0 2.0000 0 0
2.0000 0 6.0000 0.3333 -2.0000 0
0 2.0000 0.3333 6.0000 0 -2.0000
0 0 -2.0000 0 3.0000 0.5000
0 0 0 -2.0000 0.5000 3.0000
8
Segue file: inserimento matrice;calcolo soluzione
col metodo di Cholesky ed errore
N=6; % dimensione matrice
% costruzione dei blocchi
a1=2*eye(2);a2=zeros(2); % blocco a1=A([1:2],[3,4]),
% blocco a2=A([1:2],[5:6])
d1=1/2*ones(2)+(3-1/2)*eye(2); % blocco d1=A([1:2],[1:2])
d2=1/3*ones(2)+(6-1/3)*eye(2); % blocco d2=A([3:4],[3:4])
format rat
A=[d1 a1 a2;a1 d2 -a1; a2 -a1 d1] % matrice A
alpha=[1:5 0]'; % soluzione analitica
b=A*alpha
format short e
R=chol(A); % fattorizzazione di Cholesky
y=R'\b;
xC=R\y; % soluzione col metodo di Cholesky
errC=norm(xC-alpha,inf); % errore del metodo di Cholesky
9
Segue file: applicazione del metodo SOR
% calcolo matrice di iterazione e suo raggio spettrale
D=diag(diag(A));E=tril(A,-1);
B_GS=eye(N)-inv(D+E)*A; % matrice di iterazione di Gauss-
% Seidel (G-S)
rho_GS=max(abs(eig(B_GS))); % raggio spettrale di G-S
omega=2./(1+sqrt(1-rho_GS)) % valore ottimale per SOR
OE=omega*tril(A,-1);
Bsor=eye(N)-omega*inv(D+OE)*A; % matrice di iterazione di
% SOR
rhosor=max(abs(eig(Bsor))) % raggio spettrale di SOR
precisione=1e-11;
nmax=30; toll=precisione/cond(A,inf)
x0=[0 -2*ones(1,N-1)]'; % vettore di innesco metodo SOR
[x,iter,residuo,rho]=Gauss_Seidel_ril(A,b,x0,omega,nmax,to
ll); % chiamata function per applicazione metodo SOR
10
Segue file: calcolo dell’errore del metodo SOR;
costruzione tabella dei risultati
% Calcolo dell’errore ad ogni iterazione metodo SOR
for i=1:iter+1
errS(i)=norm(x(i,:)-alpha',inf);
end
% Stima numero operazioni per il metodo di Cholesky
nC=round(N^3/6+N^2); % numero operazioni per la
% fattorizzazione + numero operazioni per la risoluzione
% dei 2 sistemi triangolari
% Stima numero operazioni per il metodo SOR
nS=N^2*iter; % numero operazioni= numero iterazioni*
% dimensione matrice^2
% Tabella dei risultati
n soluzione errore
72 1.0000 2.0000 3.0000 4.0000 5.0000 0.0000 2.66e-015
15 6 8 11
6 6 5 3
A1 , A i A1 per i 2, 3.
i
8 5 7 6
11 3 6 9
15
Quesito 1
16
Quesito 2a
17
Quesito 2b
A1 2
A A1
T
1 A1
2
2 A1 A1
A 1
1 2 A A T
1
1
1 A 1
1
max A1
K 2 A1 A1 A1
A1 A 1
min A1
2 1 2 1
20
Soluzione teorica del Quesito 1
Proprietà delle matrici A i , i 2, 3
A 2 A1 A 2 A T2
2
per la simmetria di A 1 .
Inoltre risulta:
A 2 A i A 2 i A 1
2 2
1
max A2 max A1
2
quindi:
K 2 A2
min A2 min A1
K2(A1)
Analogamente per i = 3. 21
Istruzioni relative al Quesito 1
% file script: punto1.m
clear all
disp('Numero di condizionamento delle matrici Ai')
A1=[15 6 8 11 ; 6 6 5 3 ; 8 5 7 6; 11 3 6 9];
cond_Ai=[];cond_A=[];
for i =1:3
Ai=A1^i;
cond_Ai=[cond_Ai,cond(Ai)]; % vettore dei cond(Ai)
cond_A=[cond_A,cond(A1)^i]; % vettore dei cond(A1)^i
errore(i)= norm(cond_Ai-cond_A)/norm(cond_A);
end
disp('cond(Ai)')
disp(num2str(cond_Ai,'%18.10e'))
disp('(cond(A1))^i')
disp(num2str(cond_A,'%18.10e'))
disp('errore') 22
disp(num2str(errore,'%13.3e'))
Output punto1
>> punto1
Numero di condizionamento delle matrici Ai
cond(Ai) 6.4993885835e+03 4.2242052054e+07
2.7454849047e+11
(cond(A1))^i 6.4993885835e+03 4.2242051959e+07
2.7454751024e+11
errore 0.000e+00 2.248e-09 3.570e-06
Indicheremo con K1, K2, K3 il condizionamento in
norma 2 delle matrici A1, A2, A3 rispettivamente.
Conseguenze del numero di condizionamento grande?
Una grande amplificazione dell’errore in entrata e quindi
soluzione non precisa
23
Calcolo della soluzione di A2 x b 2
446 199 272 330 1247 1
199 106 131 141 577 1
A2 , b2 ,
272 131 174 199 776 1
330 141 199 247 917 1
Nel caso della matrice con indice 3, calcolando la stima del numero
di cifre che si perdono, si ottiene:
%_________________________________________
...
iter=0;
residuo=b-A*x;
while norm(residuo)>toll*norm(b)& iter<100
y=L\(P*residuo);
err=U\y;
x=x+err;
residuo=b-A*x;
iter=iter+1;
end
if iter==100
disp('Raggiunto il numero massimo di iterazioni')
end
30
Esercizio 3
Sia dato il sistema lineare avente la matrice dei
coefficienti A ed il vettore dei termini noti b di
seguito definiti:
4 1 0 0 0
0 3
1 5 2 0 0 0 2
0 2 6 3 0 0 1
A b
0 0 3 5 1 0 1
0 0 0 1 3 1 3
0 0 0 0 1 2 4 31
Quesiti 1 e 2
1. Si studi la convergenza dei metodi di Jacobi, Gauss-
Seidel e Rilassamento in serie (SOR) per il sistema
assegnato.
32
Quesito 3a
33
Quesito 3b
b) faccia visualizzare una tabella con l’ intestazione:
iterazioni soluzione residuo
che, su ogni riga, riporti il numero dell’ iterazione i, la
soluzione approssimata x i e la norma del residuo resi
corrispondente;
Si utilizzino i seguenti formati di stampa:
2 cifre intere per il valore di i;
5 cifre decimali e formato virgola fissa per la
soluzione approssimata x i ;
1 cifra decimale e formato esponenziale per la
norma del residuo resi . 34
Studio della convergenza dei metodi
Caratteristiche della matrice A:
a) diagonalmente dominante Jacobi converge
b) tridiagonale anche Gauss-Seidel converge; inoltre:
BGS 2
BJ R BGS 2 R BJ
Quindi il metodo di Gauss-Seidel ha velocità di
convergenza doppia rispetto a quella del metodo di Jacobi!
c) simmetrica
d) definita positiva perché è a) e c) e tutti gli elementi
sulla diagonale principale sono positivi
anche il metodo SOR converge con parametro di
rilassamento in (0,2). 35
Qual è il metodo più veloce?
Per la proprietà d) SOR converge per
: 0 < < 2;
è inoltre il metodo più veloce se si assume:
2
ott .
1 1 BGS
36
Istruzioni relative al Quesito 2
I0=[4 5 6 5 3 2];I1=[1 2 3 -1 1];
A=diag(I0)+diag(I1,-1)+diag(I1,1)
D=diag(diag(A)); [n,m]=size(A);
B_J=eye(n)-inv(D)*A; % metodo di Jacobi
rho_J=max(abs(eig(B_J)))
R_J=-log(rho_J)
omega=1; % metodo di Gauss-Seidel
OE=omega*tril(A,-1);
B_GS=eye(n)-omega*inv(D+OE)*A;
rho_GS=max(abs(eig(B_GS)))
R_GS=-log(rho_GS)
omega_ott=2/(1+sqrt(1-rho_GS)) % metodo SOR
OE=omega_ott*tril(A,-1);
B_r=eye(n)-omega_ott*inv(D+OE)*A;
rho_r=max(abs(eig(B_r)))
R_r=-log(rho_r) 37
Risultati file Quesito 2
omega_ott = 1.1804
rho_r = 0.1804 R_r = 1.7126
38
Istruzioni relative al Quesito 3
b=[3 -2 1 -1 3 4]';K=cond(A,inf);
precisione=input('precisione = '); % 1.e-4
toll=precisione/K % toll = 9.3310e-006
x0=ones(n,1);omega=omega_ott;nmax=20;
x,iter,res,rho]=Gauss_Seidel_ril(A,b,x0,omega,nma
x,toll);
it=[0:iter]';tab=[it x res];
s='--------------------------------------------';
fprintf('iter soluzione residuo\n')
disp(s)
fprintf('%2d %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f
39
%9.1e\n',tab');
Risultati file Quesito 3
iter soluzione errore
-----------------------------------------------------------------
0 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.5e+000
1 0.40980 -1.22145 -0.09326 -0.11434 0.56155 1.84897 1.1e+000
2 1.17181 -0.48443 0.47164 -0.41692 0.18755 1.91655 4.2e-001
3 0.81686 -0.80030 0.67260 -0.59295 0.15916 1.92112 1.3e-001
4 0.97411 -0.87533 0.76977 -0.63672 0.14526 1.92850 3.4e-002
5 0.96788 -0.90620 0.79022 -0.64659 0.14099 1.92969 8.7e-003
6 0.97811 -0.91270 0.79491 -0.64914 0.14028 1.92989 1.1e-003
7 0.97819 -0.91376 0.79599 -0.64961 0.14015 1.92993 3.4e-004
8 0.97849 -0.91415 0.79622 -0.64972 0.14011 1.92995 5.1e-005
9 0.97855 -0.91421 0.79627 -0.64974 0.14010 1.92995 1.3e-005
10 0.97855 -0.91422 0.79628 -0.64975 0.14010 1.92995 2.5e-006
41
Quesiti 1, 2 e 3
1 - Dopo aver determinato con MATLAB gli autovalori, si
deduca motivando la risposta, la caratteristica fondamen_
tale della matrice;
44
Istruzioni relative al quesito 1
clear all;clc
% Costruzione della matrice
d=[6.36091 2.5 3.4695 4.6653 2 5.8043];
n=length(d);d1=zeros(1,n-1);d2=[-1.6685 0 0 -0.8399];
d3=[-0.9371 0 1.8615];d4=zeros(1,n-4);d5=2.5369;
A1=diag(d1,1)+diag(d2,2)+diag(d3,3)+diag(d4,4)+diag(d5,5);
A2=A1';A=(A1+A2+diag(d))
alpha=ones(n,1);b=A*alpha
%% A è simmetrica per costruzione; si riportano però,
%% commentate, le istruzioni necessarie per eventualmente
%% verificare la simmetria di una matrice A.
%% Simmetria=(A==A');
%% if Simmetria==1
%% disp('A e'' simmetrica')
%% end
% Verifica della condizione sugli autovalori
autovalori=eig(A)
if autovalori>0
disp('A e'' definita positiva') 45
end
Istruzioni relative ai quesiti 2 e 3
K2=cond(A);
% stima cifre perse
cifre_perse=round(log10(K2))
toll=1e-14;
[x,iter]=Gausspv_r(A,b,toll);
err_rel=norm(x-alpha)/norm(alpha);
bp=b;
bp(4)=b(4)+1e-4;pert=norm(b-bp)/norm(b)
[x1,iter1]=Gausspv_r(A,bp,toll);
err_rel1=norm(x1-alpha)/norm(alpha);
tab=[[iter;iter1] [x';x1'] [err_rel;err_rel1]];
st='%3d';
for i=1:n
st=[st,' %10.6f '];
end
st=[st,'%10.2e \n'];
fprintf('iter \t\t\t\t soluzione
\t\t\t\t\t\t errore \n\n')
fprintf(st,tab') 46
Risultati quesito 1
format short
A =
pert=7.9240e-006
K2 =
9.0001
Il condizionamento K2 di A è buono.
A piccole perturbazioni sui dati corrispondono
piccole variazioni sui risultati.
cifre_perse =
1
48