6 a lezione - laboratorio

32
6 a lezione - laboratorio a.a 2004-2005 Corso di Laurea ING. MECCANICA

description

6 a lezione - laboratorio. Corso di Laurea ING. MECCANICA. a.a 2004-2005. La scatola dei co lori. Avevo una scatola di colori Ogni colore splendeva di gioia Avevo una scatola di colori Caldi e delicati e vivi. Non avevo il rosso per le ferite e per il sangue, - PowerPoint PPT Presentation

Transcript of 6 a lezione - laboratorio

Page 1: 6 a  lezione - laboratorio

6a lezione - laboratorio

a.a 2004-2005

Corso di Laurea ING. MECCANICA

Page 2: 6 a  lezione - laboratorio

La La scatolascatola deidei cocoloriloriAvevo una scatola di coloriAvevo una scatola di coloriOgni colore splendeva di gioiaOgni colore splendeva di gioiaAvevo una scatola di coloriAvevo una scatola di coloriCaldi e delicati e vivi.Caldi e delicati e vivi.Non avevo il rosso per le ferite e per il sangue,Non avevo il rosso per le ferite e per il sangue,Non avevo il nero per l’orfano,Non avevo il nero per l’orfano,Non avevo il bianco per il viso dei morti,Non avevo il bianco per il viso dei morti,Non avevo il giallo per le sabbie infuocate,Non avevo il giallo per le sabbie infuocate,Avevo l’arancione per la gioia e per la vita,Avevo l’arancione per la gioia e per la vita,Avevo il verde per germogli e fioriture,Avevo il verde per germogli e fioriture,Avevo il blu per limpidi cieli azzurri,Avevo il blu per limpidi cieli azzurri,Avevo il rosa per i sogni e per il riposo.Avevo il rosa per i sogni e per il riposo.Mi sedetti Mi sedetti ee dipinsi dipinsiLa PACE La PACE Tali ShurekTali Shurek

Page 3: 6 a  lezione - laboratorio

Esercizio 1

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.

Data l’equazione:

sin 0.5sin 2 0, 1, 1f x x x x

Page 4: 6 a  lezione - laboratorio

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 : -1.9309205276636407e-003 Ordine stimato : 0.9999897626825431 Fattore di riduzione : 0.6666198373211456

Page 5: 6 a  lezione - laboratorio

Tabella riassuntiva - Newton iter=0:it;fprintf('%2d %23.15e %15.3e %15.3e\n',[iter' xvect xdiff fx]')

0 -1.000000000000000e+000 0.000e+000 3.868e-001 1 -5.955642027988763e-001 4.044e-001 9.658e-002 2 -3.843266909954277e-001 2.112e-001 2.735e-002 3 -2.529596248184762e-001 1.314e-001 7.965e-003 4 -1.677278487209687e-001 8.523e-002 2.343e-003 5 -1.115548118641202e-001 5.617e-002 6.920e-004 6 -7.429254153014103e-002 3.726e-002 2.047e-004 7 -4.950555324952729e-002 2.479e-002 6.063e-005 8 -3.299695812958521e-002 1.651e-002 1.796e-005 9 -2.199597566746803e-002 1.100e-002 5.320e-00610 -1.466339248533952e-002 7.333e-003 1.576e-00611 -9.775419823703882e-003 4.888e-003 4.671e-00712 -6.516894652077655e-003 3.259e-003 1.384e-00713 -4.344581058363196e-003 2.172e-003 4.100e-00814 -2.896382816341328e-003 1.448e-003 1.215e-00815 -1.930920527663641e-003 9.655e-004 3.600e-009>>

xvect ci mostra la lenta convergenza.

Page 6: 6 a  lezione - laboratorio

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 : -6.1035156250000000e-005 Ordine stimato : 1.0000000000000000 Fattore di riduzione : 0.5000000000000000

Page 7: 6 a  lezione - laboratorio

Tabella riassuntiva - bisezioneiter=1:it;fprintf('%2d %23.15e %15.3e %15.3e\n',[iter' xvect xdiff fx]') 1 0.000000000000000e+000 5.000e-001 0.000e+000 2 -5.000000000000000e-001 2.500e-001 5.869e-002 3 -2.500000000000000e-001 1.250e-001 7.691e-003 4 -1.250000000000000e-001 6.250e-002 9.728e-004 5 -6.250000000000000e-002 3.125e-002 1.220e-004 6 -3.125000000000000e-002 1.563e-002 1.526e-005 7 -1.562500000000000e-002 7.813e-003 1.907e-006 8 -7.812500000000000e-003 3.906e-003 2.384e-007 9 -3.906250000000000e-003 1.953e-003 2.980e-00810 -1.953125000000000e-003 9.766e-004 3.725e-00911 -9.765625000000000e-004 4.883e-004 4.657e-01012 -4.882812500000000e-004 2.441e-004 5.821e-01113 -2.441406250000000e-004 1.221e-004 7.276e-01214 -1.220703125000000e-004 6.104e-005 9.095e-01315 -6.103515625000000e-005 3.052e-005 1.137e-013>>

Page 8: 6 a  lezione - laboratorio

Confronto tra i due metodi

Il valore ottenuto con la bisezione è più vicino alla soluzione vera x = 0!!!

Newton

Bisezione

Iter xvect xdiff fx....15 -1.930920527663641e-003 9.655e-004 3.600e-009

Iter xvect xdiff fx....15 -6.103515625000000e-005 3.052e-005 1.137e-013

Page 9: 6 a  lezione - laboratorio

Motivo di tale comportamento?

BisezioneNumero di Iterazioni : 15 Radice calcolata : -6.1035156250000000e-005 Ordine stimato : 1.0000000000000000 Fattore di riduzione : 0.5000000000000000

NewtonNumero di Iterazioni : 15 Radice calcolata : -1.9309205276636407e-003 Ordine stimato : 0.9999897626825431 Fattore di riduzione : 0.6666198373211456

Page 10: 6 a  lezione - laboratorio

La radice è multipla?

sin 0.5sin 2 0 0

cos cos 2 0 0

sin 2sin 2 0 0

cos 4cos 2 0 3 0

f x x x f

f x x x f

f x x x f

f x x x f

x = 0 è radice multipla con molteplicità m = 3.

Page 11: 6 a  lezione - laboratorio

Grafico di f ( x )

fplot('sin(x)-0.5*sin(2*x)’,[-1,1])gridtitle('Andamento di f(x)= sin(x)- 0.5*sin(2*x)')

Anche il graficomostra che la radice x=0 è multipla

Page 12: 6 a  lezione - laboratorio

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

)(

)(1

k

kkk xf

xfmxx

Iter xvect xdiff fx....3 7.266362938868759e-010 1.634e-003 0.000e+000

Page 13: 6 a  lezione - laboratorio

Modifica del problema:

( )0,

( )

f xF x

f x

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';

0f x

F xf x

, ,f x x a b

1 1 2

( ) ( )* = -

( ) ( ) ( )

k k kk k k k

k k k k

F x f x f xx x x x

F x f x f x f x

L’applicazione del metodo di Newton al problema implica:

Page 14: 6 a  lezione - laboratorio

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 70Warning: Divide by zero.> 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 0 -1.000000000000000e+000 0.000e+000 4.044e-001 1 -3.108031246559614e-001 6.892e-001 1.053e-001 2 -9.943189700371891e-003 3.009e-001 3.314e-003 3 -3.276824228314046e-007 9.943e-003 1.092e-007 4 -1.029850733179902e-010 3.276e-007 NaN 5 NaN NaN NaN

Page 15: 6 a  lezione - laboratorio

Semplificazione della F ( x )

2

sin 1 cos ; 1 cos 1 2cos

sin 1 cos( ) per 0

( ) 1 cos 1 2cos

cos 2 , 0 0

1 2cos

f x x x f x x x

x xf xF x x

f x x x

xF x F

x

Poiché: sin 2 2sin cosx x x

Page 16: 6 a  lezione - laboratorio

fplot('sin(x)/(1+2*cos(x))’,[-1,1])gridtitle(‘F(x)=sin(x)/(1+2*cos(x))’)

Grafico di F(x)

Page 17: 6 a  lezione - laboratorio

fplot('(cos(x)+2)/(1+2*cos(x))^2’,[-1,1])gridtitle(‘DF(x)=(cos(x)+2)/(1+2*cos(x))^2’)

Grafico di F’(x)

Page 18: 6 a  lezione - laboratorio

fplot('(7+2*cos(x)) *sin(x)/(1+2*cos(x))^3',[-1,1])gridtitle('F''''(x)= (7+2*cos(x)) *sin(x)/(1+2*cos(x))^3)')

La derivata seconda non ha segno costante per la convergenza del metodo di Newton occorre prendere vicino alla soluzione!!

Grafico di F’’(x)

0x

Page 19: 6 a  lezione - laboratorio

Risultati del problema modificatometodo 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 : 0.0000000000000000e+000 Ordine stimato : 3.0020776453233839 Fattore di riduzione : 0.3387128554185560

x0=-0.8;[xvect,xdiff,fx,it,p,c]=newton(x0,nmax,toll,fun,dfun);

Numero di Iterazioni : 5 Radice calcolata : 0.0000000000000000e+000 Ordine stimato : 3.0052937675224145 Fattore di riduzione : 0.3450700538122051

Page 20: 6 a  lezione - laboratorio

Utilizzo della function ‘fzero’ di Matlab

>> alfa=fzero('(x^2-4)*cos(x)+4*x*sin(x)',0.8)

alfa =

8.052563483762232e-001

>> options=optimset('Tolx',1e-15);

>> x=fzero('sin(x)-0.5*sin(2*x)',-0.1,options)

x =

1.050493220693351e-008

21. 4 cos 4 sin 0f x x x x x

2. s i n 0.5 s i n 2 0f x x x

Il risultato è meno preciso!!

Page 21: 6 a  lezione - laboratorio

Esercizio 2: Sistema non lineareDato il sistema non lineare :

2 2

2

4 00 :

0

x y yF x

y x

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.

Page 22: 6 a  lezione - laboratorio

Punto a: separazione grafica0422 yyx

02 xyCirconferenza:C=(0,2),R = 2

Parabola simm.rispetto l’asse x

La soluzione D = [1,2] x [1,2]

fplot('2-sqrt(4-x^2)', [0,2]),gridhold onfplot('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

Page 23: 6 a  lezione - laboratorio

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([1 2 1 2])hold off

Page 24: 6 a  lezione - laboratorio

Punto b: metodo di punto fisso

)(

)(4

),(

),(

2

12

2

1

xgxy

ygyyx

yxg

yxgxGx

1. continua e derivabile

2. ( )

G

G D D

Convergenza del metodo di punto fisso

1 1

1 2

2 2

,3. 0 1 :

,

g g

x yg gJ x D

x y g g

x y

,Indichiamo: maxi j i j

x y DJ

Page 25: 6 a  lezione - laboratorio

Verifica delle ipotesi: Hp.1, Hp.2

2 1, 2 [1,2]g D

Hp.1 Le funzioni

1

2

2Hp.2 0

4

dg yy D

dy y y

1 3,2 1,2g D

g1 crescente

g2 è anche crescente

11 2,g g C D

Page 26: 6 a  lezione - laboratorio

Verifica delle ipotesi: Hp. 3

2

12 212

20

4 2, 0, 0

1 40

2

y

y y yJ J J

y y

x

12 12 12 123/ 22

40 1 1 / 3 1

4J J J

y y

12 21

1max , 1

3

3 / 221 21 21 21

10 1 1 / 2 1

4J J J

x

Il metodo di punto fissoconverge!!

Page 27: 6 a  lezione - laboratorio

Istruzioni metodo punto fissox0=[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;....

Page 28: 6 a  lezione - laboratorio

Risultati e tabella: metodo in parallelo

Numero di iterazioni : 15 Radice calcolata: 1.9010802796691053e+000 1.3787965146159946e+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

0 1.000000000000000 1.000000000000000 0.000e+000 2.000e+000 1 1.732050807568877 1.000000000000000 7.321e-001 7.321e-001 2 1.732050807568877 1.316074012952492 3.161e-001 5.322e-001.... .... .... .... ....14 1.901079828717214 1.378796514615995 1.380e-006 1.715e-00615 1.901080279669105 1.378796514615995 4.510e-007 4.510e-007

Page 29: 6 a  lezione - laboratorio

Risultati e tabella: metodo in serie

it soluzione xdiff fx

0 1.000000000000000 1.000000000000000 0.000e+000 2.000e+000 1 1.732050807568877 1.316074012952492 7.321e-001 5.322e-001 2 1.879426839289333 1.370921893941932 1.474e-001 7.202e-002 3 1.898489066726062 1.377856693102030 1.906e-002 8.677e-003 4 1.900772923229405 1.378685215424248 2.284e-003 1.030e-003 5 1.901043907559104 1.378783488282009 2.710e-004 1.221e-004 6 1.901076023090326 1.378795134561450 3.212e-005 1.447e-005 7 1.901079828717214 1.378796514615995 3.806e-006 1.715e-006 8 1.901080279669105 1.378796678146965 4.510e-007 2.032e-007

Numero di iterazioni : 8 % sono di meno!

Radice calcolata:

1.9010802796691053e+000

1.3787966781469649e+000

Page 30: 6 a  lezione - laboratorio

Punto c: metodo di Newton

Indichiamo:

2 1 2

0

,( ), det 0 ,

,

Th. : ( )

f fF C D J x y D

x y

I D x I

1k k kJ x h F x

kkk yxx ,

: 0,F D

1 1 perk k kx x h k

Hp.

La soluzione del sistema:

Page 31: 6 a  lezione - laboratorio

Istruzioni metodo di Newtonx0=[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: 1.9010803402881398e+000 1.3787967001295518e+000

Page 32: 6 a  lezione - laboratorio

Tabella riassuntiva del metodo di Newton

it soluzione xdiff fx

0 1.000000000000000 1.000000000000000 0.000e+000 2.000e+000 1 3.000000000000000 2.000000000000000 2.000e+000 5.000e+000 2 2.166666666666667 1.541666666666667 8.333e-001 9.045e-001 3 1.927083333333333 1.395833333333333 2.396e-001 7.867e-002 4 1.901399523614772 1.379015003483898 2.568e-002 9.425e-004 5 1.901080391293387 1.378796735902042 3.191e-004 1.495e-007 6 1.901080340288140 1.378796700129552 5.101e-008 2.665e-015

iter=0:it;

tab=[iter' xvect xdiff fx];

fprintf('%2d %19.15f %19.15f %13.3e %13.3e\n’, tab')