1 5 a -6 a lezione di laboratorio Laurea Specialistica in Ingegneria MATEMATICA Laurea Specialistica in Ingegneria MATEMATICA a.a
2 Come creare un grafico 2-D Sintassi per disegnare una curva con: specifica dei dati nel vettore x e/o y specifica del colore e dello stile della linea plot(x, y, colore_stilelinea) plot(x1, y1,r*,x2, y2,b-,...) Sintassi per disegnare più curve:
3 Completamento di un grafico Per completare un grafico si può aggiungere: un titolo: title('Grafico ed …'); la griglia: grid; le label sugli assi: xlabel('x');ylabel('y')
4 Editore grafico Uno dei modi per migliorare laspetto di un grafico è il seguente: selezionare View e, dal menu che compare, scegliere Plot Edit Toolbar; nella finestra compare una seconda barra.
5 Come operare con leditor grafico Cliccando sullicona si ottengono i tool del plot che consentono di modificare la grafica della figura. Le icone indicate dalle linee, consentono di inserire testo, frecce e linee su una figura.
6 Come inserire un testo sulla figura 1.Selezionare licona T dalla barra oppure cliccare su Insert e scegliere TextBox 1.Posizionarsi nel punto desiderato e scrivere 2.Scrivere x_3 per ottenere x 3 (opp. x^3 per x 3 ) 3.cliccare fuori dal riquadro per rendere attivo lo scritto
7 Come inserire una freccia sulla figura Selezionare licona oppure dal menu di Insert selezionare Arrow Posizionarsi nel punto di inizio della freccia, trascinare il mouse tenendo premuto il suo tasto sinistro fino al punto di arrivo della freccia.
8 Esercizio 1 a - Scrivere un file script che consenta di disegnare, sullintervallo [0,4], le funzioni: y=3*sin(pi*x) e y=exp(-0.2*x) nella stessa finestra grafica. Si consideri la partizione x=0:0.02:4. b - Inserire le label per gli assi x, y ed il titolo. c - Usare gtext per indicare i vari punti di intersezione delle due curve. d - Memorizzare il file col nome grafico.
9 File grafico.m clear all x=0:0.02:4; y=3*sin(pi*x); plot(x,y,'r'),xlabel('x');ylabel('y');grid hold on y1=exp(-0.2*x); plot(x,y1,'g') %osservare il numero delle intersezioni gtext('x1');gtext('x2');gtext('x3');gtext('x4'); % oppure %C=strvcat(x1,x2,x3,x4); %gtext(C) title('Grafico ed intersezioni di 3*sin(pi*x) e exp(- 0.2*x)') hold off clear all x=0:0.02:4; y=3*sin(pi*x); plot(x,y,'r'),xlabel('x');ylabel('y');grid hold on y1=exp(-0.2*x); plot(x,y1,'g') %osservare il numero delle intersezioni gtext('x1');gtext('x2');gtext('x3');gtext('x4'); % oppure %C=strvcat(x1,x2,x3,x4); %gtext(C) title('Grafico ed intersezioni di 3*sin(pi*x) e exp(- 0.2*x)') hold off
10 Risultato esercizio 1 titolo » title('Grafico ed …') etichetta asse y » ylabel('y') etichetta asse x » xlabel('x') gtext »gtext('x3')
11 Esercizio 2 Scrivere un file script che consenta di disegnare, nellintervallo [-2,2] e su due finestre grafiche distinte, il grafico della funzione: f(x)=exp(-x 2 )cos(20x) che viene definita nella function fun. Si utilizzino i due comandi MATLAB: plot per la figura 1 fplot per la figura 2. N.B. Nellutilizzare il comando plot s i può considerare la partizione x=[-2:0.1:2].
12 Soluzione esercizio 2: comando plot function y=fun(x) y=exp(-x.^2).*cos(20*x); function y=fun(x) y=exp(-x.^2).*cos(20*x); figure(1) x=[-2:0.1:2]; y=fun(x); plot(x,y),title('Comando plot') xlabel('x');ylabel('y'); grid figure(1) x=[-2:0.1:2]; y=fun(x); plot(x,y),title('Comando plot') xlabel('x');ylabel('y'); grid
13 function y=fun(x) y=exp(-x.^2).*cos(20*x); function y=fun(x) y=exp(-x.^2).*cos(20*x); figure(2) I=[-2,2]; fplot('fun',I), grid % Matlab ver.6 % utilizzabile anche nella ver. 7 title('Comando fplot') xlabel('x');ylabel('y') figure(3) % metodo alternativo I=[-2,2]; grid % Matlab ver.7 title('Comando fplot') xlabel('x');ylabel('y') Soluzione esercizio 2: comando fplot
14 Figura 1
15 Figura 2 e 3 (sono uguali)
16 Comandi plot e fplot x=[-2:0.1:2]; y=exp(-x.^2).*cos(20*x); figure(1) plot(x,y),grid %oppure f='exp(-x.^2).*cos(20*x)';%stringa %y=eval(f); %crea il vettore di dimensione % =length(x) %plot(x,y),grid f='exp(-x.^2).*cos(20*x)';% stringa figure(2) fplot(f,[-2,2]),grid E possibile utilizzare i comandi plot e fplot, senza definire un file function esterno:
17 Comando ezplot figure(1) ezplot('x.^2-y.^2-1',[ ]) %forma implicita figure(1) ezplot('x.^2-y.^2-1',[ ]) %forma implicita Il comando ezplot consente di graficare funzioni date in forma implicita ed in forma parametrica
18 figure(2) ezplot('cos(t)','sin(t)') % forma parametrica
19 Più grafici in una finestra grafica E possibile inserire più di un grafico nella stessa finestra grafica. % Comando plot x=-1:0.1:1; y1=sin(2*x); y2=x.*exp(-x); plot(x,y1,x,y2) % Comando fplot x.*exp(-x)], [-1 1]) %Matlab7 Alternativamente si può utilizzare il comando hold on: fplot( ' sin(2*x) ',[-1 1]) hold on fplot( ' x.*exp(-x) ',[-1 1]) hold off 1) 2)
20 Più finestre grafiche in una sola figura: subplot %file figure x=0.1:.1:5; subplot(2,3,1);plot(x,x); title('y=x');xlabel('x'); ylabel('y'); subplot(2,3,2);plot(x,x.^2); title('y= x^2');xlabel('x'); ylabel('y'); subplot(2,3,3),plot(x,x.^3); title('y= x^3');xlabel('x'); ylabel('y'); subplot(2,3,4),plot(x,cos(x)); title('y=cos(x)');xlabel('x');ylabel('y'); subplot(2,3,5),plot(x,cos(2*x)); title('y=cos(2x)');xlabel('x');ylabel('y') subplot(2,3,6),plot(x,cos(3*x)); title('y=cos(3x)');xlabel('x');ylabel('y') % I colori e lo spessore sono stati % aggiunti utilizzando i tool del plot %file figure x=0.1:.1:5; subplot(2,3,1);plot(x,x); title('y=x');xlabel('x'); ylabel('y'); subplot(2,3,2);plot(x,x.^2); title('y= x^2');xlabel('x'); ylabel('y'); subplot(2,3,3),plot(x,x.^3); title('y= x^3');xlabel('x'); ylabel('y'); subplot(2,3,4),plot(x,cos(x)); title('y=cos(x)');xlabel('x');ylabel('y'); subplot(2,3,5),plot(x,cos(2*x)); title('y=cos(2x)');xlabel('x');ylabel('y') subplot(2,3,6),plot(x,cos(3*x)); title('y=cos(3x)');xlabel('x');ylabel('y') % I colori e lo spessore sono stati % aggiunti utilizzando i tool del plot
21 Risultati file figure
22 Comandi: plot e semilog Due modi di graficare la funzione Scala lineare su entrambi gli Assi Scala logaritmica sullAsse Y x=0:0.1:50; y=exp(x); subplot(1,2,1);plot(x, y); grid;title('plot') subplot(1,2,2); semilogy(x,y); grid;title('semilogy')
23 Esercizio 3 (Esame 02/12/2002) Si considerino i sistemi lineari A i x i =b i, i=1,2,3, con i vettori dei termini noti b i, i=1,2,3, scelti in modo che la soluzione dei sistemi sia i =[1,1,1,1] T, i=1,2,3. Supponiamo che:
24 Si determini, mediante MATLAB, il condizionamento K 2 (A i ), i = 1, 2, 3 e si verifichi che K 2 (A i ) = (K 2 ( A 1 ) ) i, i=2, 3. Si spieghi il motivo di tale relazione e se ne prevedano le conseguenze. Quesito 1
25 Si costruisca un file MATLAB: Cognome_Nome.m, che una volta avviato: a) faccia visualizzare una schermata con i dati personali (cognome, nome, matricola, corso di Laurea) ed una breve presentazione del problema; Quesito 2a
26 b) mediante un ciclo for, determini i dati A i, b i, i=1, 2, 3; risolva quindi i sistemi applicando il metodo di Gauss con pivoting parziale; calcoli lerrore relativo in norma 2; Quesito 2b
27 c) faccia visualizzare una tabella riassuntiva che riporti: intestazione: indice iter soluzione errore e su ogni riga il valore dellindice della matrice, il numero di iterazioni effettuate nel raffinamento, la soluzione corrispondente scritta come vettore riga e lerrore relativo ; Si utilizzino i seguenti formati di stampa: 1 cifra intera per il valore di ; 2 cifre intere per il valore di ; 10 cifre decimali e formato virgola fissa per le componenti di ; 2 cifre decimali e formato esponenziale per. Quesito 2c
28 Soluzione teorica del Quesito 1 Proprietà della matrice e conseguenze:
29 Soluzione teorica del Quesito 1 Proprietà delle matrici Analogamente per i = 3. K2(A1)K2(A1) per la simmetria di quindi:
30 Istruzioni relative al Quesito 1 % file script: punto1.m clear all disp('Numero di condizionamento delle matrici Ai') A1=[ ; ; ; ]; 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 end disp('cond(Ai)') disp(num2str(cond_Ai,'%13.3e')) disp('(cond(A1))^i') disp(num2str(cond_A,'%13.3e'))
31 Output punto1 >> punto1 Numero di condizionamento delle matrici Ai cond(Ai) 6.499e e e+011 (cond(A1))^i 6.499e e e+011 Conseguenze del numero di condizionamento grande? Indicheremo con K1, K2, K3 il condizionamento in norma 2 delle matrici A1, A2, A3 rispettivamente.
32 Calcolo della soluzione di >> x2=A2\b2 % Operatore \ x2 = >> err2=norm(x2-alpha)/norm(alpha) err2 = 3.76e-010=.376e-009 >> nc=log10(K2) nc = Numero di cifre significative perse 10 cifre signific., 9 decimali corretti
33 Oltre che sul numero di cifre significative che si perdono, come incide il valore grande di K 2 (A 2 )? >> A2m=A2; >> A2m(2,2)=A2(2,2)+1e-3; % perturbazione data % sulla matrice >>pert=norm(A2-A2m)/norm(A2) pert = e-006 % entità della perturbazione >> x2m=A2m\b2 % soluzione perturbata x2m = >> err2m=norm(x2m-alpha)/norm(alpha) err2m = >100% !!!
34 Istruzioni relative al Quesito 2a clear all disp('Cognome e nome studente: XXXX XXX') disp('Numero di matricola: XXXX') disp('Corso di Laurea: XXXX') disp(' ') disp('Questo programma calcola e visualizza la soluzione dei ') disp('sistemi lineari A_i x_i=b_i, i =1,2,3, con i vettori b_i tali che sia') disp('alpha=[1,1,1,1]'',essendo: ') A1=[ ; ; ; ]; disp('A1=');disp(A1) disp( 'e A_i= A1^i per i=2,3.')
35 Output file Cognome_Nome.m >> Cognome_Nome Cognome e nome studente: XXXX XXX Numero di matricola: XXXX Corso di Laurea:XXXX Questo programma calcola e visualizza la soluzione dei sistemi lineari A_i x_i=b_i, i =1,2,3, con i vettori b_i tali che sia alpha=[ ]', essendo: A1= e A_i= A1^i per i=2,3.
36 Istruzioni relative al Quesito 2b tab=[]; toll=1e-13; alpha=ones(4,1); % soluzione for i =1:3 A=A1^i; b=A*alpha; % vettore termini noti [L,U,P] = lu(A); y=L\(P*b); x=U\y; [x,iter]=Raff_iter(A,b,L,U,P,x,toll); residuo=b-A*x; norm_residuo=norm(b-A*x); err=norm(alpha-x)/norm(alpha); tab=[tab;[i,iter,x',err,norm_residuo]]; end Istruzioni di Gausspv_r.m %La chiamata di Gausspv_r è: [x,iter] = Gausspv_r(A,b,toll)
37 Risultati File Quesito 2b Tabella Quesito 2c fprintf('i iter \t\t\t soluzione \t\t \t\t errore residuo\n') fprintf('%1d %2d %14.10f %14.10f %14.10f %14.10f %10.2e %10.2e \n',tab'); i iter soluzione errore residuo e e e e e e+000 Nellultimo caso calcolando la stima del numero di cifre che si perdono, si ottiene: >> nc=log10(K3) nc = Numero di cifre significative perse
38 Istruzioni utilizzate in Raff_iter function [x,iter]=Raff_iter(A,b,L,U,P,x,toll) %_________________________________________... 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
39 Esercizio 4 Sia dato il sistema lineare avente la matrice dei coefficienti ed il vettore dei termini noti così assegnati:
40 1.Si studi la convergenza dei metodi di Jacobi, Gauss-Seidel e Rilassamento in serie (SOR) per il sistema assegnato. 2.Si dica quale di questi metodi è il più veloce giustificando teoricamente la risposta e calcolando, mediante Matlab, i raggi spettrali delle rispettive matrici di iterazione ed il valore ottimale del parametro per il metodo SOR. Quesiti 1 e 2
41 3. Si costruisca un file MATLAB che: a)calcoli la soluzione numerica del problema assegnato applicando il metodo con convergenza migliore e fissando una precisione non inferiore a 1.e-4, nmax=20 ed un vettore di innesco pari a x0=[ ] T ; Quesito 3a
42 b) faccia visualizzare una tabella riassuntiva che riporti: intestazione: iterazioni soluzione residuo; e su ogni riga, il numero dell iterazione, la soluzione approssimata corrispondente e la norma del residuo ; Si utilizzino i seguenti formati di stampa: 2 cifre intere per il valore di ; 5 cifre decimali e formato virgola fissa per la soluzione approssimata ; 1 cifra decimale e formato esponenziale per la norma del residuo. Quesito 3b
43 Convergenza dei metodi Caratteristiche di A: a)diagonalmente dominante Jacobi conv. b)tridiagonale anche Gauss-Seidel converge; inoltre: c) simmetrica d) definita positiva perché è a), c) e tutti gli elementi sulla diagonale principale sono positivi.
44 Qual è il metodo più veloce? Per la proprietà d) SOR converge per è inoltre il metodo più veloce se si assume:
45 Istruzioni relative al Quesito 2 I0=[ ];I1=[ ]; 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)
46 Risultati file Quesito 2 rho_J = R_J = rho_GS = R_GS = omega_ott = rho_r = R_r = rho_J = R_J = rho_GS = R_GS = omega_ott = rho_r = R_r =
47 Istruzioni relative al Quesito 3 b=[ ]';K=cond(A,inf); precisione=input('precisione = '); % 1.e-4 toll=precisione/K % toll = e-006 x0=ones(n,1);omega=omega_ott;nmax=20; [x,iter,res,rho]=Gauss_Seidel_ril(A,b,x0,omega,nmax,toll); it=[0:iter]';tab=[it x res]; s=' '; disp(s) fprintf('iter soluzione errore\n') fprintf('%2d %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %9.1e\n',tab');
48 Risultati file Quesito 3 iter soluzione errore e e e e e e e e e e e-006 Si invitano gli studenti a determinare la soluzione con precisione = 1.e-8 e riportare le componenti della soluzione approssimata con 10 cifre e virgola fissa.
49 Esercizio 5 (Esame ) Sia data la seguente matrice: 0 e vettore b tale che la soluzione del sistema sia
50 Quesiti 1, 2 e Dopo aver determinato con MATLAB gli autovalori, si deduca motivando la risposta, la caratteristica fondamen_ tale della matrice; 2 - si determini il condizionamento in norma 2 e si dica, sempre motivando la risposta, se il sistema è ben condi_ zionato calcolando, inoltre, il numero di cifre significative che si perdono, rispetto alle 16 del MATLAB, risolvendo il sistema; 3 - Si costruisca un file MATLAB: Cognome_NomeStudente.m che, una volta avviato:
51 Quesiti a), b) e c) a- faccia visualizzare una schermata con i dati personali e una breve presentazione del problema; b- calcoli la soluzione numerica del sistema assegnato con il metodo di Gauss e raffinamento iterativo con una tolleranza di 1e-14 e calcoli lerrore relativo; calcoli anche, sempre con lo stesso metodo, la soluzione del sistema che ha la stessa matrice dei coefficienti e vettore termini noti perturbato, rispetto a quello dato, nel termine b(4) della quantità ; c- faccia visualizzare una tabella in cui si riporti: intestazione: iterazioni soluzione errore, il numero di iterazioni eseguite nel raffinamento, la soluzione ottenuta e lerrore relativo nel primo e nel secondo caso
52 Quesito 4 utilizzando i seguenti formati di stampa: 3 cifre e formato intero per il numero dell iterazione, 6 cifre decimali e virgola fissa per le soluzioni nei due casi, 2 cifre decimali e formato floating point per lerrore nel primo caso. 4- Si confrontino e si commentino i risultati.
53 Istruzioni relative al quesito 1 clear all clc % Costruzione della matrice d=[ ]; n=length(d); d1=zeros(1,n-1); d2=[ ];d3=[ ]; 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 Simmetria=(A==A'); if Simmetria==1 disp('A e'' simmetrica') end autovalori=eig(A) if autovalori>0 disp('A e'' definita positiva') end
54 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; [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')
55 Risultati quesito 1 A = b = A e' simmetrica A e' definita positiva A = b = A e' simmetrica A e' definita positiva autovalori = autovalori = format short
56 Tabella dei risultati iter soluzione errore e e-006 iter soluzione errore e e-006 K2 = Quindi: cifre_perse = 1 K2 = Quindi: cifre_perse = 1 Il condizionamento K2 di A è buono. A piccole perturbazioni sui dati corrispondono piccole variazioni sui risultati.