a 8 lezione - laboratorio Esercizi Preparziale Corso di Laurea ING. MECCANICA a.a 2004-2005 Esercizio 1: Quesiti 1,2 Dato il seguente problema differenziale: y x 2 cos 2 y y sin 2 x y 1 0 12- x 1,1 Si verifichi se il problema è ben posto; dato il metodo numerico yi 1 yi h f xi 1 , yi 1 si riconosca il metodo e se ne stabilisca l’ordine motivando la risposta. Esercizio 1: Quesito 3 3Si costruisca un file MATLAB: Cognome_studente_matricola.m che, una volta avviato: • faccia visualizzare una schermata con i dati personali ed una breve presentazione del problema; • permetta di dare in input il punto iniziale ed il valore della soluzione in tale punto; •determini la soluzione utilizzando il metodo di Heun con passi h1=1/100, h2=1/200; • faccia visualizzare una tabella in cui compaia l’intestazione : x y1 y2 con x vettore dei nodi, y1 soluzione nel primo caso e y2 soluzione nel secondo caso, • riporti ogni 10, i valori corrispondenti nei seguenti formati: 2 cifre decimali e formato virgola fissa per i punti di valutazione ; 8 cifre decimali e formato virgola fissa per i valori y1 e y2. Esercizio 1: Quesiti 4, 5 4 - Mediante il comando subplot, si riportino in una stessa figura 2 finestre grafiche orizzontali, nella prima finestra compaia il grafico della soluzione y1, nella seconda il grafico di y2. 5 – Si commentino i risultati. Se si fosse utilizzato il metodo del punto 2 i risultati sarebbero stati migliori? Motivare la risposta. Istruzioni MATLAB: quesiti 3, 4 clear all disp(' ') disp('Cognome e nome studente: XXXX_XXX') disp('Numero di matricola: XXXX') disp('Corso di Laurea: XXXX ') disp(' ') disp(' Questo programma consente di calcolare e visualizzare ') disp(' la soluzione di un problema di Cauchy utilizzando') disp(' il metodo di heun per due passi di discretizzazione.' ) disp(' ') disp(' ') x0=input('x0 = ');y0=input('y0 = '); xmax=1; % x0=-1; y0=0;% dati da inserire f='t.^2*cos(y).^2+y*sin(t).^2'; % calcolo della soluzione con n=n1 h1=0.01;n1=round((xmax-x0)/h1); [T1,Y_H1]=Heun(x0,xmax,n1,y0,f); Seguito Istruzioni MATLAB % calcolo della soluzione con n=n2 h2=0.005; n2=round((xmax-x0)/h2); [T2,Y_H2]=Heun(x0,xmax,n2,y0,f); tab=[T1 Y_H1 Y_H2(1:2:end)]; disp('-------------------------------------------') disp(' t soluzione1 soluzione2 ') disp('-------------------------------------------') fprintf('%6.2f %14.8f %14.8f \n',tab(1:10:end,:)') disp(' ') subplot(1,2,1);plot(T1,Y_H1); title(['Soluzione con n=' num2str(n1)]);xlabel('x');ylabel('Soluzione');grid subplot(1,2,2);plot(T2,Y_H2); title(['Soluzione con n=' num2str(n2)]);xlabel('x');ylabel('Soluzione');grid Risultati file Preparziale_1 Cognome e nome studente: XXXX_XXX Numero di matricola: XXXX Corso di Laurea: XXXX Questo programma consente di calcolare e visualizzare la soluzione di un problema di Cauchy utilizzando il metodo di heun per due passi di discretizzazione. x0 = -1 y0 = 0 -------------------------------------------------------------------------t soluzione1 soluzione2 ---------------------------------------------------------------------------1.00 0.00000000 0.00000000 -0.90 0.09316132 0.09316100 -0.80 0.17168302 0.17168187 -0.70 0.23516280 0.23516055 -0.60 0.28422117 0.28421766 -0.50 0.32013654 0.32013169 -0.40 0.34461269 0.34460643 -0.30 0.35964368 0.36742076 -0.20 0.36742999 0.36742076 -0.10 0.37031513 0.37030436 0.00 0.37073008 0.37071777 0.10 0.37114570 0.37113121 0.20 0.37403293 0.37401754 0.30 0.38184673 0.38182982 0.40 0.39700739 0.39698898 0.50 0.42188584 0.42186602 0.60 0.45875111 0.45873001 0.70 0.50964512 0.50962302 0.80 0.57614862 0.57612598 0.90 0.65903862 0.65901610 1.00 0.75792421 0.75790261 Esercizio 2: Quesiti 1, 2 Data la funzione: f x , y 3 1 xy e 2 x 2 y 1 2 1) Si determini il sistema atto a calcolare gli estremi relativi; 2) Mediante Matlab si esegua l’individuazione grafica delle soluzioni sapendo che esse cadono negli intervalli: D1 1.5, 1.2 2, 1.5 , D2 0.2,0.8 1.5, 1.2 , D3 1.5, 2 1.1, 2 Esercizio 2: Quesiti 3, 4 3 -Si costruisca un file MATLAB: Cognome_studente_matricola.m che, una volta avviato: • faccia visualizzare una schermata con i dati personali ed una breve presentazione del problema; • contenga le istruzioni relative al punto 2; • permetta di dare in input il valore di nmax=10 e di toll= ; • calcoli le soluzioni con il metodo di Newton; • faccia visualizzare una tabella in cui compaia l’intestazione : • iterazioni approssimazioni valori_funzione • in approssimazioni vanno riportati i valori in xvect ed in valori_ funzione i valori in fx; tali valori siano dati nei seguenti formati: • 2 cifre intere per le iterazioni ; • 10 decimali e formato virgola fissa per i valori in xvect e fx. 4 -Si commentino i risultati mettendo in evidenza se essi rispettano la teoria. Rappresentazione Superficie f x , y 3 1 xy e 2 x 2 y 1 2 y=-4:.1:1; x=-2:.1:2; [X,Y]=meshgrid(x,y); Z=3*(1-X.*Y).^2.*exp(-X.^2-(Y+1).^2); title(‘rappresentazione funzione') surf(X,Y,Z) xlabel('x');ylabel('y'); Superficie Soluzione quesito 1: determinazione del sistema Il sistema si determina annullando il gradiente di f(x,y). Si calcolano le derivate parziali si azzerano e si elimina da2 entrambe le equazioni 2 x y 1 il fattore ottenendo: 6e 0 1 xy y x x 2 y 0 F x 0 : 1 xy x y 11 xy 0 Esplicitando, dopo avere considerato che 1-xy=0 dà infinite soluzioni, le due equazioni rispetto a y, si ottiene: x y 2 x 1 5x2 2x 1 y 1 x 2x Individuazione grafica delle soluzioni figure(1) fplot('x/(x^2-1)',[-1.5,-1.2]) hold on fplot('(1-x+sqrt(1+2*x+5*x^2))/(2*x)',[-1.5,-1.2]),grid hold off figure(2) fplot('x/(x^2-1)',[1.5,2]) hold on fplot('(1-x+sqrt(1+2*x+5*x^2))/(2*x)',[1.5,2]),grid hold off figure(3) fplot('x/(x^2-1)',[0.2,0.8]) hold on fplot('(1-x-sqrt(1+2*x+5*x^2))/(2*x)',[0.2,0.8]),grid hold off Ricordiamo che i punti che azzerrano il gradiente non sono Necessariamente estremi della funzione!!! Verifica delle condizioni minime di applicabilità del metodo di Newton f1 x , y y x x 2 y 0 f 2 x , y x y 11 xy 0 Si deduce: 1 2 xy 1 x2 J x, y 2 1 y y 1 x 2 xy il cui determinante deve essere non nullo nei punti dei tre intervalli. La verifica si può fare mediante MATLAB tenendo conto dei risultati ottenuti nell’individuazione grafica Verifica non annullamento di det(J ( x,y )) % verifica della condizione di det(Jac)diverso da 0 clear all clc figure(1) y=-2:.01:-1.5;x=-1.5:.01:-1.2; [X,Y]=meshgrid(x,y); Z=-X-4*X.*Y+X.^2.*Y+X.^2.*Y.^2+Y+Y.^2+X.^2; surf(X,Y,Z) figure(2) y=1.1:.01:2;x=1.5:.01:2; [X,Y]=meshgrid(x,y); Z=-X-4*X.*Y+X.^2.*Y+X.^2.*Y.^2+Y+Y.^2+X.^2; surf(X,Y,Z) figure(3) y=-1.5:.01:-0.8;x=0.2:.01:0.8; [X,Y]=meshgrid(x,y); Z=-X-4*X.*Y+X.^2.*Y+X.^2.*Y.^2+Y+Y.^2+X.^2; surf(X,Y,Z) Soluzione quesito 3: Newton e tabella Le istruzioni seguenti vanno ripetute 3 volte inserendo rispettivamente i punti di innesco: [-1.3,-1.8], [1.5,1.2], [0.5,-1.5] nmax=input('nmax='); toll=input('toll='); fun=strvcat('x(2)+x(1).*(1-x(1).*x(2))','x(1)+(1x(1).*x(2)).*(1+x(2))'); J11='1-2*x(1).*x(2)';J12='1-x(1).^2'; J21='1-x(2)-x(2).^2';J22='1-x(1)-2*x(1).*x(2)'; Jac=strvcat(J11,J12,J21,J22); [xvect,xdiff,fx,it]=newtonxs(x0,nmax,toll,fun,Jac); iter=0:it; tab=[iter' xvect xdiff fx]; fprintf('iter soluzione xdiff fx \n') fprintf('%2d %19.12f %19.12f %13.3e %13.3e\n',tab') Soluzioni -1.2986712038098545e+000 -1.8915986833871814e+000 in 5 iterazioni 1.5413291810500551e+000 1.1203998408900298e+000 in 5 iterazioni 6.9747049787326465e-001 -1.3581754455841648e+000 in 5 iterazioni