Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
6a lezione - laboratorio
Corso di Laurea ING. MECCANICA a.a
2
La scatola dei colori Avevo una scatola di colori
Ogni colore splendeva di gioia Caldi e delicati e vivi. Non avevo il rosso per le ferite e per il sangue, Non avevo il nero per l’orfano, Non avevo il bianco per il viso dei morti, Non avevo il giallo per le sabbie infuocate, Avevo l’arancione per la gioia e per la vita, Avevo il verde per germogli e fioriture, Avevo il blu per limpidi cieli azzurri, Avevo il rosa per i sogni e per il riposo. Mi sedetti e dipinsi La PACE Tali Shurek
3
Esercizio 1 Data l’equazione:
Si verifica facilmente che x = 0 è soluzione. b) Senza preoccuparsi delle ipotesi di convergenza, si approssimi tale soluzione, applicando il metodo di Newton e quello di bisezione per 15 iterazioni. c) Fare le dovute considerazioni.
4
Punto b: metodo di Newton
x0=-1; nmax=15; toll=1e-12; fun='sin(x)-0.5*sin(2*x)'; dfun='cos(x)-cos(2*x)'; [xvect,xdiff,fx,it,p,c]=newton(x0,nmax,toll,fun ,dfun); Superato il numero massimo di iterazioni Numero di Iterazioni : 15 Radice calcolata : e-003 Ordine stimato : Fattore di riduzione :
5
Tabella riassuntiva - Newton
iter=0:it; fprintf('%2d %23.15e %15.3e %15.3e\n',[iter' xvect xdiff fx]') e e e-001 e e e-002 e e e-002 e e e-003 e e e-003 e e e-004 e e e-004 e e e-005 e e e-005 e e e-006 e e e-006 e e e-007 e e e-007 e e e-008 e e e-008 e e e-009 >> xvect ci mostra la lenta convergenza.
6
Punto b: metodo di bisezione
a=-1;b=1; nmax=15; toll=1e-12; fun='sin(x)-0.5*sin(2*x)'; [xvect,xdiff,fx,it,p,c]=bisezione(a,b,nmax,toll ,fun); Superato il numero massimo di iterazioni Numero di Iterazioni : 15 Radice calcolata : e-005 Ordine stimato : Fattore di riduzione :
7
Tabella riassuntiva - bisezione
iter=1:it; fprintf('%2d %23.15e %15.3e %15.3e\n',[iter' xvect xdiff fx]') e e e+000 e e e-002 e e e-003 e e e-004 e e e-004 e e e-005 e e e-006 e e e-007 e e e-008 e e e-009 e e e-010 e e e-011 e e e-012 e e e-013 e e e-013 >>
8
Confronto tra i due metodi
Newton Iter xvect xdiff fx .... e e e-009 Bisezione Iter xvect xdiff fx .... e e e-013 Il valore ottenuto con la bisezione è più vicino alla soluzione vera x = 0!!!
9
Motivo di tale comportamento?
Newton Numero di Iterazioni : 15 Radice calcolata : e-003 Ordine stimato : Fattore di riduzione : Bisezione Numero di Iterazioni : 15 Radice calcolata : e-005 Ordine stimato : Fattore di riduzione :
10
x = 0 è radice multipla con molteplicità
La radice è multipla? x = 0 è radice multipla con molteplicità m = 3.
11
Grafico di f ( x ) Anche il grafico mostra che la radice
x=0 è multipla fplot('sin(x)-0.5*sin(2*x)’,[-1,1]) grid title('Andamento di f(x)= sin(x)- 0.5*sin(2*x)')
12
Modifica metodo di Newton: m noto
x0=-1; nmax=15; toll=1e-12; fun='sin(x)-0.5*sin(2*x)'; dfun='cos(x)-cos(2*x)'; mol=3; [xvect,xdiff,fx,it,p,c]=newton_m(x0,nmax,toll, fun,dfun,mol); Arresto per azzeramento di dfun Iter xvect xdiff fx .... e e e+000
13
Modifica del problema:
L’applicazione del metodo di Newton al problema implica: fun='(sin(x)-0.5*sin(2*x))./(cos(x)-cos(2*x))'; dfun='1-((sin(x)-0.5*sin(2*x)).*(-sin(x)+2*… sin(2*x)))./(cos(x)-cos(2*x)).^2';
14
Metodo di Newton (*): risultati
[xvect,xdiff,fx,it,p,c]=newton(x0,nmax,toll,fun,dfun); Warning: Divide by zero. > In C:\analisi_numerica\prog_matlab_new\eq_non_lin\NEWTON.M at line 70 > In C:\analisi_numerica\prog_matlab_new\eq_non_lin\NEWTON.M at line 62 Numero di Iterazioni : 5 Radice calcolata : NaN Iter xvect xdiff fx e e e-001 e e e-001 e e e-003 e e e-007 e e NaN NaN NaN NaN
15
Semplificazione della F ( x )
Poiché:
16
Grafico di F(x) fplot('sin(x)/(1+2*cos(x))’,[-1,1]) grid
title(‘F(x)=sin(x)/(1+2*cos(x))’)
17
Grafico di F’(x) fplot('(cos(x)+2)/(1+2*cos(x))^2’,[-1,1]) grid
title(‘DF(x)=(cos(x)+2)/(1+2*cos(x))^2’)
18
Grafico di F’’(x) La derivata seconda non ha segno costante per la convergenza del metodo di Newton occorre prendere vicino alla soluzione!! fplot('(7+2*cos(x)) *sin(x)/(1+2*cos(x))^3',[-1,1]) grid title('F''''(x)= (7+2*cos(x)) *sin(x)/(1+2*cos(x))^3)')
19
Risultati del problema modificato metodo Newton (*)
x0=0.7; fun='sin(x)./(1+2*cos(x))'; dfun='(cos(x)+2)./(1+2*cos(x)).^2'; [xvect,xdiff,fx,it,p,c]=newton(x0,nmax,toll,fun,dfun); Numero di Iterazioni : 5 Radice calcolata : e+000 Ordine stimato : Fattore di riduzione : x0=-0.8; Ordine stimato : Fattore di riduzione :
20
Utilizzo della function ‘fzero’ di Matlab
>> alfa=fzero('(x^2-4)*cos(x)+4*x*sin(x)',0.8) alfa = e-001 >> options=optimset('Tolx',1e-15); >> x=fzero('sin(x)-0.5*sin(2*x)',-0.1,options) x = e-008 Il risultato è meno preciso!!
21
Esercizio 2: Sistema non lineare
Dato il sistema non lineare : a) separare graficamente le soluzioni; b) utilizzare il metodo di punto fisso per approssimare la soluzione situata nel primo quadrante; c) applicare quindi il metodo di Newton per risolvere lo stesso problema. d) Confrontare i risultati ottenuti nei due casi.
22
Punto a: separazione grafica
Circonferenza:C=(0,2),R = 2 Parabola simm.rispetto l’asse x fplot('2-sqrt(4-x^2)', [0,2]),grid hold on fplot('2+sqrt(4-x^2)', [0,2]) fplot('sqrt(x)',[0,4]), hold off %y=0:.01:4; %x2=0:.01:4; %x1=sqrt(-%y.^2+4*y); %y2=sqrt(x2); %plot(x1,y,x2,y2),grid La soluzione D = [1,2] x [1,2]
23
Grafico di F ( x ) in [1,2] x [1,2]
fplot('2-sqrt(4-x^2)', [1,2]),grid hold on fplot('2+sqrt(4-x^2)', [1,2]) fplot('sqrt(x)',[1,2]) axis([ ]) hold off
24
Punto b: metodo di punto fisso
Convergenza del metodo di punto fisso
25
Verifica delle ipotesi: Hp.1, Hp.2
Hp.1 Le funzioni g1 crescente g2 è anche crescente
26
Verifica delle ipotesi: Hp. 3
Il metodo di punto fisso converge!!
27
Istruzioni metodo punto fisso
x0=[1 1]; nmax=30; toll=1.e-6; fun=strvcat('x(1)^2+x(2)^2-4*x(2)', '-x(1)+x(2)^2'); % x,y sono in x(1),x(2) g=strvcat('sqrt(4*x(2)-x(2)^2)','sqrt(x(1))'); [xvect,xdiff,fx,it]=Punto_fissoxs(x0,nmax,toll, fun,g); .... while (it<nmax) & (norm(res_x,inf)>=toll) xap=x; for k=1:n x_new(k)=eval(g(k,:)); % x(k)=x_new(k); % da aggiungere per avere la % soluzione con metodo in serie end x=xap;
28
Risultati e tabella: metodo in parallelo
Numero di iterazioni : 15 Radice calcolata: e+000 e+000 iter=0:it; tab=[iter' xvect xdiff fx]; fprintf('%2d %19.15f %19.15f %13.3e %13.3e\n', tab') it soluzione xdiff fx e e+000 e e-001 e e-001 e e-006 e e-007
29
Risultati e tabella: metodo in serie
Numero di iterazioni : % sono di meno! Radice calcolata: e+000 e+000 it soluzione xdiff fx e e+000 e e-001 e e-002 e e-003 e e-003 e e-004 e e-005 e e-006 e e-007
30
Punto c: metodo di Newton
Indichiamo: Hp. La soluzione del sistema:
31
Istruzioni metodo di Newton
x0=[1 1]; nmax=30; toll=1.e-6; fun=strvcat('x(1)^2+x(2)^2-4*x(2)', '-x(1)+x(2)^2'); Jac=strvcat('2*x(1)','2*x(2)-4','-1','2*x(2)'); % Jacobiana in forma di vettore di stringhe [xvect,xdiff,fx,it]=newtonxs(x0,nmax,toll,fun, Jac); Numero di iterazioni : 6 % Sono in numero < 8!! Radice calcolata: e+000 e+000
32
Tabella riassuntiva del metodo di Newton
iter=0:it; tab=[iter' xvect xdiff fx]; fprintf('%2d %19.15f %19.15f %13.3e %13.3e\n’, tab') it soluzione xdiff fx e e+000 e e+000 e e-001 e e-002 e e-004 e e-007 e e-015
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.