Sei sulla pagina 1di 61

a

9 -10a lezione di laboratorio

Calcolo Numerico

a.a. 2014-2015
La scatola dei colori
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,
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
Esercizio 1: prima prova parziale 19-05-2006
1) Sia data l’equazione f ( x )  1  x  e 2 x 1  0.
Con considerazioni teoriche ed utilizzando Matlab, si esegua la
separazione grafica delle soluzioni.
2) Si considerino le radici 1 ,  2 e, dopo avere enunciato
il teorema di convergenza (anche solo locale) del metodo di
Newton, si verifichi se, per entrambe, le ipotesi sono
soddisfatte;
3) si inneschi il metodo suddetto con x0 = - 0.9 per la prima
radice e con x0 = 1 per la seconda; si eseguano 6 iterazioni
del metodo, specificando se l’andamento delle approssimazioni è
quello previsto dal metodo di Newton. Si motivi la risposta e si
dica quante cifre si possono considerare corrette nell’ultima
approssimazione nei due casi. 2 x k  1
4) Si dica se il metodo di punto fisso k  1x  1  e , k  0,1,...
è convergente alla radice maggiore nell’intervallo [0, 1.5].
Quesito1-Considerazioni teoriche
La funzione esiste su tutto l’asse reale, e risulta:
lim f  x   ;
x 

ln 2  1
Inoltre: f   x   1  2e 2 x 1  0  x   0.1534
2
Dal segno di f’ si deduce che il punto trovato è di massimo
ed in esso la funzione vale:  ln 2  1 
f   0.6534
 2 

Sulla base del limite e del valore di f nel suo massimo,


si deduce che la funzione ha 2 zeri disposti rispettivamente
a sinistra ed a destra del massimo.
Si può quindi assumere come intervallo in cui eseguire la
separazione grafica delle radici I=[-1,1.5]
Separazione grafica; grafici di f’ e f’’
% separazione grafica
f='1-x-exp(-2*x-1)';
df='-1+2*exp(-2*x-1)';% derivata prima di f
ddf='-4*exp(-2*x-1)';% derivata seconda di f
% grafico di f
subplot(2,2,1), fplot(f,[-1 1.5]);grid on;
title('funzione')
% in alternativa si esamina l’intersezione tra f1, f2:
% non si fa se si è fatto il grafico di f!!!
% f1='1-x';f2='exp(-2*x-1)';
% fplot(f1,[-1 1.5]);
% hold on, fplot(f2,[-1 1.5]);grid on;
% title('intersezioni tra f1 e f2')

% Esame della derivata prima e seconda di f


subplot(2,2,2), fplot(df,[-1 1.5]);grid on;
title('derivata prima')
subplot(2,2,3), fplot(ddf,[-1 1.5]); grid on;
title('derivata seconda')
Grafici
funzione derivata prima
1 6

0.5 4

0 2

-0.5 0

-1 -2
-1 -0.5 0 0.5 1 1.5 -1 -0.5 0 0.5 1 1.5

derivata seconda
0

-5

-10

-15
-1 -0.5 0 0.5 1 1.5
Grafico alternativo per la separazione grafica
intersezioni tra f1 e f2
3

2.5

1.5

0.5

-0.5
-1 -0.5 0 0.5 1 1.5
Teorema di convergenza locale
metodo di Newton
Hp: f  C [a , b] , f (a ) f (b )  0,
2

f ( x )  0 , x   a , b 
Th:  I      a, b  : x 0  I   
risulta : lim x k    0.
k 

Può essere utile verificare il segno della derivata f” per la scelta


del punto di innesco infatti, se f ( x )  0 oppure f ( x )  0 x   a , b  ,

è numericamente conveniente scegliere come innesco l’estremo di


Fourier, ossia il punto in cui risulta f  x  f   x   0
0 0
Verifica delle ipotesi di convergenza

 1  [1,  0.7]  I1
f(-1)= -0.7182818 < 0
f(-0.7)= 0.2081753 > 0

f(0.5)=0.3646647 > 0
f(1.5)= -0.5183156 < 0
  2  [0.5, 1.5]  I 2
2 x  1
f '   1  2e
Dai grafici si vede che

 2 x 1
f ' '   4e  0 x
f '( x)  0 x  I 1 ,
Sono verificate le ipotesi di
convergenza locale nei due
f '( x)  0 x  I 2
intervalli e si può scegliere come f ''  0 x
innesco un estremo di Fourier
Risoluzione col metodo di Newton:
istruzioni
% f(-0.9)*f”(-0.9)>0; f(1)*f”(1)>0;
x0=[-0.9 1];nmax=6;toll=1e-14;
fun=f;dfun=df; % f e df sono stringhe definite
% in percedenza, rappresentative di f e f’
% N.B. Nel ciclo che segue si costruiscono 2
% tabelle distinte una per ogni valore di i.
% Non si deve quindi assegnare tab =[] prima
% del ciclo per aggiornarla poi all’interno.
for i=1:2
[xvect,xdiff,fx,it,p,c]=Newton(x0(i),nmax,toll,
fun,dfun);
tab=[[0:it]' xvect xdiff fx];
fprintf('iter \t\t\t x_app \t\t x_diff
abs(f(x)) \n')
fprintf(' %3d %24.15e %12.2e %12.2e\n',tab')
end
Metodo di Newton: prima radice
superato numero massimo di iterazioni
Numero di Iterazioni : 6
Radice calcolata : -7.9153693801834546e-001
Ordine stimato : 2.0006388325961839
Fattore di riduzione : 1.3949362770259011

iter x_app x_diff abs(f(x))


0 -9.000000000000000e-001 0.00e+000 3.26e-001
1 -8.056698907811827e-001 9.43e-002 3.72e-002
2 -7.918084829688424e-001 1.39e-002 7.02e-004
3 -7.915370402610916e-001 2.71e-004 2.64e-007
4 -7.915369380183600e-001 1.02e-007 3.73e-014
5 -7.915369380183456e-001 1.44e-014 2.22e-016
6 -7.915369380183455e-001 1.11e-016 0.00e+000

Se allora poniamo nmax=7, ci rendiamo conto che il numero


massimo di iterazioni è sufficiente ed il file restituisce gli stessi
risultati senza la scritta
superato numero massimo di iterazioni
Metodo di Newton: seconda radice

Numero di Iterazioni : 4
Radice calcolata : 9.4435167809671094e-001
Ordine stimato : 1.9853951938794778
Fattore di riduzione : 0.1114667005894942

iter x_app x_diff abs(f(x))


0 1.000000000000000e+000 0.00e+000 4.98e-002
1 9.447071986722225e-001 5.53e-002 3.16e-004
2 9.443516939168468e-001 3.56e-004 1.41e-008
3 9.443516780967109e-001 1.58e-008 4.86e-017
4 9.443516780967109e-001 0.00e+000 4.86e-017
Metodo di Newton: seconda radice con punto
d’innesco x0=0.55 (non è estremo di Fourier)
Numero di Iterazioni : 5
Radice calcolata : 9.4435167809671094e-001
Ordine stimato : 1.9902521409822731
Fattore di riduzione : 0.1151295671669576

iter x_app x_diff abs(f(x))

0 5.500000000000000e-001 0.00e+000 3.28e-001


1 9.837824773858106e-001 4.34e-001 3.52e-002
2 9.445347130214455e-001 3.92e-002 1.63e-004
3 9.443516822910861e-001 1.83e-004 3.73e-009
4 9.443516780967108e-001 4.19e-009 6.25e-017
5 9.443516780967109e-001 1.11e-016 4.86e-017
Convergenza locale del metodo di punto fisso
xk 1  g( xk ), k  0,1,...
Hp. 1)   g   ; g  C 1 [a , b];
2) g '( )  1

Th. I   : x0  I   , lim xk    0.


k 

La condizione g trasforma [a,b] in [a,b] è utile dal


punto di vista numerico perché assicura che tutte le approssimazioni
cadono in [a,b],e quindi diminuisce il tempo di
calcolo, ma non è necessaria per la
convergenza!!! Nel caso in esame:

g ( x )  1  e 2 x  1 ; [ a , b ]  [ 0, 1.5 ]
 2 x 1
g ' ( x )  2e
Punto fisso: grafici di g e di g’ in [0,1.5]
subplot(1,2,1),fplot('1-exp(-2*x-1)',[0 1.5]);
grid on; title('g')
subplot(1,2,2),fplot('2*exp(-2*x-1)',[0 1.5]);
grid on; title('derivata di g')

g'  0

g crescente.
I valori sono
compresi in
[0.6,1] che è
contenuto in
[0,0.5]
Verifica delle ipotesi di convergenza
Per la sua definizione g verifica l’ipotesi 1), dal grafico si
verifica facilmente l’ ipotesi 2), quindi:
1) g  C  [0,1.5];
2) 0  g '( x )  0.8  1 x  [0,1.5]

Risulta inoltre:g[0,1.5] [0.6321,0.9817]

Osserviamo ancora che g’ > 0 quindi la successione generata dal


metodo di punto fisso è monotona. Se il metodo è innescato con
un’approssimazione per difetto tutte le approssimazioni saranno per
difetto ed i valori cresceranno; al contrario, se il metodo è innescato
con un’approssimazione per eccesso tutte le approssimazioni
saranno per eccesso ed i valori diminuiranno
Istruzioni e risultati del metodo del punto fisso
fun='1-x-exp(-2*x-1)';
g='1-exp(-2*x-1)';
x0=0.55;nmax=100;toll=1e-14;
[xvect,xdiff,fx,it,p,c]=Punto_fisso(x0,nmax,toll
,fun,g);
tab=[[0:it]' xvect xdiff fx];
fprintf(' iter \t\t\t x_app \t\t x_diff
abs(f(x)) \n')
fprintf(' %3d %24.15e %12.2e %12.2e\n',tab')

Numero di Iterazioni : 16
Radice calcolata : 9.4435167809671050e-001
Ordine stimato : 0.9967456179973452
Fattore di riduzione : 0.1012188117871999
Tabella completa del metodo del punto fisso
iter x_app x_diff abs(f(x))
0 5.500000000000000e-001 0.00e+000 3.28e-001
1 8.775435717470181e-001 3.28e-001 5.89e-002
2 9.363965232019383e-001 5.89e-002 7.06e-003
3 9.434592152016668e-001 7.06e-003 7.93e-004
4 9.442522612723385e-001 7.93e-004 8.84e-005
5 9.443406122377243e-001 8.84e-005 9.83e-006
6 9.443504464901161e-001 9.83e-006 1.09e-006
7 9.443515410228616e-001 1.09e-006 1.22e-007
8 9.443516628408494e-001 1.22e-007 1.36e-008
9 9.443516763987847e-001 1.36e-008 1.51e-009
10 9.443516779077374e-001 1.51e-009 1.68e-010
11 9.443516780756788e-001 1.68e-010 1.87e-011
12 9.443516780943702e-001 1.87e-011 2.08e-012
13 9.443516780964504e-001 2.08e-012 2.32e-013
14 9.443516780966819e-001 2.31e-013 2.58e-014
15 9.443516780967076e-001 2.58e-014 2.91e-015
16 9.443516780967105e-001 2.89e-015 3.47e-016
% 0.55 è un’approssimazione per difetto e la successione
% delle approssimazioni è monotona crescente!
Esercizio 2 (Esame 21/02/2005)
 2
Data la funzione: f  x   ln  x    x ,
 3

1) si provi, con le dovute motivazioni, che essa ammette un solo


zero e si stabilisca l’intervallo che lo contiene;
2) si verifichi, dopo aver dato l’enunciato del teorema, che il
metodo di Newton per la ricerca di tale zero è convergente.
3) Si costruisca un file MATLAB: Cognome_Nome_matricola.m,
che una volta avviato:
a) faccia visualizzare una schermata con i dati personali
(cognome, nome, matricola, corso di Laurea,
CFU) ed una breve presentazione del problema;
a) contenga le istruzioni MATLAB relative ai punti 1 e 2;
b) permetta di introdurre con input da tastiera i valori: x0=0.5
del punto di innesco, nmax=15 del numero massimo di
iterazioni;
d) risolva il problema con il metodo di Newton e toll=1.e-12;
e) faccia visualizzare una tabella riassuntiva che riporti
l’intestazione: it soluzione fx rapp
it è il vettore delle iterate, soluzione è il vettore delle
approssimazioni xi , fx contiene i valori del residuo calcolato in
tali approssimazioni, rapp è il vettore dei rapporti

f   xi 
2 f   xi 

calcolati sulle approssimazioni, con i seguenti formati di stampa:


1 cifra intera per i valori delle iterazioni;
12 cifre decimali e formato virgola fissa per
i valori xi
8 cifre decimali e formato esponenziale per
i valori del residuo calcolato in xi;
8 cifre decimali e formato esponenziale per
f 
i valori del rapporto in xi .
2f

4) Si commentino i risultati; si dica inoltre e motivando la


risposta, cosa rappresenta il limite dell’ultimo vettore
richiesto.
Punto 1: proprietà di f ( x )
 2
f  x  ln  x    x  f1  x  f2  x,
 3


 2 2
f1  x   ln  x  x    2 
 3  3 f  x   C   , 

f2  x   x x  3 

Gli zeri reali coincidono coi punti x che verificano


l’uguaglianza: f1  x    f 2  x 
Tenendo conto che:
1
lim f  x    , lim f  x    , f   x   1  0
x 
2 x  x  2/ 3
3

 ! : f     0.
deduciamo che la funzione è
monotona quindi:
Separazione grafica
Si può allora valutare f in alcuni punti per determinare l’intervallo
in cui essa cambia segno, intervallo in cui cade l’unico zero della
funzione. In (-2/3,0] la funzione è <0, quindi la radice è situata
nel semiasse positivo.
Risulta: f(0)=-0.4055; f(1)= 1.5108.
Quindi la soluzione cade in [0,1]

clear all;clc
I=[-0.5 3];
fplot(@(x)[log(x+2/3) , -x],I);
grid
title('intersezione tra f1,f2')
legend('log(x+2/3)', '-x')

Dal grafico della slide seguente, nell’intervallo[-0.5,3]deduciamo


che
   0, 0.5 
Intersezione tra f1, f2: grafico
intersezione tra f1,f2
1.5
log(x+2/3)
1 -x
Può convenire allora,
0.5
rappresentare la
0
funzione nell’intervallo
-0.5
più ristretto in cui è
-1
contenuta la radice
-1.5

-2

-2.5

-3
-0.5 0 0.5 1 1.5 2 2.5 3
Grafico di f(x) in [0,0.5]
fplot(@(x)[log(x+2/3)+x, 0*x],[0,0.5]),grid
title('grafico della funzione in [0,0.5]')
Metodo di Newton: Teorema di
convergenza globale
Hp: f  C 2 [a , b] , f ( a ) f ( b )  0,
f ( x )  0 ,
f ( x )  0 oppure f ( x )  0 x  [ a , b],
f (a ) f (b )
 ba e  ba
f ( a ) f ( b )

Th: x0   a , b  risulta: lim xk    0 .


k 
Verifica delle ipotesi di convergenza
f(0)= -0.4055 < 0
f(0.5)= 0.6542 > 0
    0, 0.5 

df=1./(x+2/3)+1;

f   0  f crescente; essendo f '  0


sono verificate le ipotesi per la
convergenza locale!
Proprietà di f” in [0, 0.5]

ddf=-1./(x+2/3).^2;

f   0  f concava
Verifica delle ultime ipotesi per la
convergenza globale
b  a  0.5
f a f  b
 0.1622  0.5;  0.3522  0.5
f a f  b
Sono verificate tutte le ipotesi del
Teorema di convergenza globale!

 x0   a , b  , lim xk    0 .
k 
Punti c e d: istruzioni metodo di Newton
x0=input('x0= '); %x0=0.1
nmax=input('nmax= '); %nmax=15
toll=1e-12;
fun= 'log(x+2/3)+x';
dfun='1./(x+2/3)+1';
[xvect,xdiff,fx,it,p,c]=Newton(x0,nmax,toll,fun,d
fun)

%x0=0.1; %nmax=15
Numero di Iterazioni : 4
Radice calcolata : 1.7379908022086071e-001
Ordine stimato : 2.0003943955077368
Fattore di riduzione : 0.3250125848306869
Risultati con punto di innesco x0=0.5
(non estremo di Fourier)

%x0=0.5; %nmax=15
Numero di Iterazioni : 5
Radice calcolata : 1.7379908022086071e-001
Ordine stimato : 2.0087 ...
Fattore di riduzione : 0.34805...
Punto e: tabella riassuntiva metodo di Newton
iter=0:it;
ddfun='-1./ (x+2/3).^2'; x=xvect;
rapp=abs(eval(ddfun)./(2*eval(dfun)));
tab=[iter' xvect fx rapp];
fprintf('it \t\t\t soluzione \t\t fx\t\t rapp\n')
fprintf('%1d %15.12f %18.8e %18.8e\n',tab')
it soluzione fx rapp
0 0.100000000000 1.65703166e-001 3.69155045e-001
1 0.171908920978 4.14163454e-003 3.24299515e-001
2 0.173797923333 2.53337208e-006 3.23238526e-001
3 0.173799080220 9.47436574e-013 3.23237878e-001
4 0.173799080221 1.38777878e-016 3.23237878e-001
2
e k 1  C e k
xvect ci mostra la convergenza monotona del metodo ed
il raddoppio delle cifre che si assestano da un certo k in poi.
Cosa rappresenta rapp?
f    
La costante asintotica del metodo C
di Newton è: 2 f   
La k-esima componente di rapp contiene:
f   x k 
2 f   xk 

f   xk 
per k   , xk   e quindi C
2 f   xk 
Esercizio 3
Data l’equazione:

f  x   sin  x   0.5 sin  2 x   0, x   1, 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, ponendo
toll=1.e-12 e punto d’innesco x0=-1.

c) Fare le dovute considerazioni.


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);
% si ottiene
Superato il numero massimo di iterazioni
Numero di Iterazioni : 15
Radice calcolata : -1.9309205276636407e-003
Ordine stimato : 0.9999897626825431
Fattore di riduzione : 0.6666198373211456
% costruzione tabella dei risultati
iter=0:it;
fprintf(' it \t\t\t x_app \t\t x_diff fx\n')
fprintf('%2d %23.15e %15.3e %15.3e\n',[iter'
xvect xdiff fx]')
Tabella riassuntiva - Newton
it xapp 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-006
10 -1.466339248533952e-002 7.333e-003 1.576e-006
11 -9.775419823703882e-003 4.888e-003 4.671e-007
12 -6.516894652077655e-003 3.259e-003 1.384e-007
13 -4.344581058363196e-003 2.172e-003 4.100e-008
14 -2.896382816341328e-003 1.448e-003 1.215e-008
15 -1.930920527663641e-003 9.655e-004 3.600e-009

xvect ci mostra la lenta convergenza.


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);
% si ottiene
Superato il numero massimo di iterazioni

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

% costruzione tabella
iter=1:it;
fprintf(' it \t\t\t x_app \t\t x_diff fx\n')
fprintf('%2d %23.15e %15.3e %15.3e\n',
[iter' xvect xdiff fx]')
Tabella riassuntiva - bisezione
it xapp 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-008
10 -1.953125000000000e-003 9.766e-004 3.725e-009
11 -9.765625000000000e-004 4.883e-004 4.657e-010
12 -4.882812500000000e-004 2.441e-004 5.821e-011
13 -2.441406250000000e-004 1.221e-004 7.276e-012
14 -1.220703125000000e-004 6.104e-005 9.095e-013
15 -6.103515625000000e-005 3.052e-005 1.137e-013
Confronto tra i due metodi

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

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

Il valore ottenuto con la bisezione è più


vicino alla soluzione vera x = 0!!!
Qual è il motivo di tale comportamento?
Newton
Numero di Iterazioni : 15
Radice calcolata : -1.9309205276636407e-003
Ordine stimato : 0.9999897626825431
Fattore di riduzione : 0.6666198373211456

Bisezione
Numero di Iterazioni : 15
Radice calcolata : -6.1035156250000000e-005
Ordine stimato : 1.0000000000000000
Fattore di riduzione : 0.5000000000000000
La radice è multipla?
Verifica della molteplicità della radice.

f  x   sin  x   0.5 sin  2 x   f  0  0


f   x   cos  x   cos  2 x   f   0  0
f   x   sin  x   2sin  2 x   f   0   0
f   x    cos  x   4 cos  2 x   f   0   3  0

Quindi x = 0 è radice multipla con


molteplicità m = 3.
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)')

Nelle slide successive si propongono due modi per riottenere un


metodo di ordine 2.
1- Modifica metodo di Newton
Poiché in genere non si conosce la
soluzione e tantomeno la sua Metodo di Newton modificato:
molteplicità, si applica più volte il  f ( xk ) 
 xk 1  xk  m 
metodo di Newton modificato con
 
f ( xk ) 
m=2,3,… fino a riottenere ordine 2.
% in questo caso l’applicazione è semplice
% poiché è nota la radice e la sua molteplicità
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
....
3 7.266362938868759e-010 1.634e-003 0.000e+000
f  x
2- Modifica del problema: F  x  0
f  x
 f   x  ,  x   a , b 
Si applica il metodo di Newton al problema modificato; ciò implica:


 F  xk    
 f ( xk ) f ( xk ) 
 *  xk 1 =xk -   xk 1  xk  

 F   xk  
   f ( xk )  f ( xk ) f ( xk ) 
2

% istruzioni relative al nuovo problema
fun='(sin(x)-0.5*sin(2*x))./(cos(x)-cos(2*x))';
F1='1-((sin(x)-0.5*sin(2*x)).*(-sin(x)+';
F2='2*sin(2*x)))./(cos(x)-cos(2*x)).^2';
dfun=[F1 F2];
Metodo di Newton (*) per F: risultati
[xvect,xdiff,fx,it,p,c]=Newton(x0,nmax,toll,fun,dfun);
Warning: Divide by zero.
In ……..
Warning: Divide by zero.
In ……..
Numero di Iterazioni : 5
Radice calcolata : NaN
Ordine stimato : NaN
Fattore di riduzione : 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

Perché? come si può eliminare questo problema?


Semplificazione della F ( x )
La causa è la presenza di termini che tendono a zero
a numeratore e denominatore di F; è necessario allora,
scrivere numeratore e denominatore come prodotti e
semplificare i fattori simili. Si ha: sin 2 x  2sin x cos x
Allora :
f  x   sin x  1  cos x  ; f   x    1  cos x  1  2cos x 
f ( x) sin x  1  cos x 
F  x   per x  0
f ( x )  1  cos x 1  2cos x 

cos x  2
F x  , F   0  0
 1  2cos x 
2
Grafico di F(x)

Anche dal grafico è


evidente che lo zero di
F(x) è semplice!

fplot('sin(x)/(1+2*cos(x)) ',[-1,1])
grid
title('F(x)=sin(x)/(1+2*cos(x)) ')
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')
Grafico di F’’(x)

La derivata seconda non


ha segno costante; si ha
solo convergenza locale
del metodo di Newton ed
occorre prendere il punto
di innesco, 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)')
Risultati del metodo di Newton applicato al problema
modificato
x0=0.7; nmax=15; toll=1e-12;
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
Utilizzo della function ‘fzero’ di Matlab
 
1. f  x   x 2  4 cos  x   4 x sin  x   0
alfa=fzero('(x^2-4)*cos(x)+4*x*sin(x)',0.8)% per
MATLAB6. Oppure se si dispone di MATLAB7:
% alfa=fzero(@(x)(x^2-4)*cos(x)+4*x*sin(x),0.8)
alfa = 8.052563483762232e-001
2. f  x   si n  x   0.5 si n  2 x   0
options=optimset('TolX',1e-12); % si è imposta la
% stessa tolleranza assegnata nel caso esaminato
x=fzero('sin(x)-0.5*sin(2*x)',0.7,options)
x = -2.577177828170694e-009
Il risultato è meno preciso di quello ottenuto con la
function Newton !!
ESERCIZIO 4: EQUAZIONE NON LINEARE
DERIVANTE DA UN PROBLEMA MECCANICO
SISTEMA MECCANICO DI
RIFERIMENTO:
Si supponga:
Moto del corpo rigido ADBC: il ω = cost. rad/sec
punto A descrive una |OA| = R = cost. m
circonferenza di raggio OA=R e |AB| = μR con 3 ≤ μ ≤ 5
centro O fisso, il punto B si muove |AD| = l1 = hμR con 0 ≤ h ≤ 1
|DC| = l3 =cost. = kμR
sull’asse x ed il corpo rigido si
muove oscillando.
y C
A

ωt D φ x
O B B2
B1
Sviluppando i calcoli con il metodo delle equazioni indipendenti di
posizione (v. “Meccanica Applicata”) si perviene alle seguenti
relazioni mediante sviluppo di Taylor arrestato al primo ordine,
accettabile essendo l’angolo  piccolo e tanto più piccolo
quanto più grande è  (l’angolo  nelle semplificazioni si
elimina )

Posizione del punto C:

   1 
 xC  R cos  t  k sin  t  h    sin  t  
2

   2 

   1 
 yC  R  1  h  sin  t  k    2  sin  t  
2

   
Velocità del punto C:
 d xC  h 
   R   sin  t  k cos  t  sin 2 t 
 dt  2 

 d yC   R  1  h cos  t  k sin 2 t 
 dt  
2 
  
Accelerazione del punto C:

 d 2 xC  h 
 2   R cos  t  k sin  t  cos 2 t 
2

 dt   
 2
 d yC   2 R  1  h sin  t  k cos 2 t 
 dt2  
 
  
Consideriamo la velocità del punto C:
Vc
αc

y C
A

ωt D φ x
O B B2
B2
Dalle formule precedenti si ricava:

 d xC d yC
V C  d t i  d t j




2 2
 h   k 
 V C   R   sin  t  k cos  t  sin 2 t    1  h  cos  t  sin 2 t 
  2   2 

  k 
   1  h  cos  t 
2
sin 2 t 
 C  arctan  
   sin  t  k cos  t  h
sin 2 t 
  2 

 c è l’angolo che il vettore velocità forma con l’asse x


PROBLEMA: Fissati i valori dei parametri R, μ, h, k e ω, determinare il
tempo t* in cui il vettore velocità forma con l’asse delle x un angolo di
π/4. Essendo il moto periodico, il corpo assumerà la stessa velocità in
direzione e modulo dopo intervalli di ampiezza T.
Si tratta dunque di risolvere l’equazione non lineare nell’incognita t:
 k 
  1  h  cos  t  sin 2 t  
2
arctan   0
  sin  t  k cos  t  h sin 2 t  4
 2 
Si assume per risolvere l’equazione:
ω = cost.=300rad/sec
|OA| = R = cost.=0.05m
|AB| = μR con μ=4
|AD| = l1 = hμR con h=0.5 ( in questo caso D è a metà tra A e B, potrebbe
anche essere h<0)
DC
|DC| = l3 =cost. = kμR, con k= =0.3
AB
Andamento dell’angolo c
fun ='atan((1/2*cos(x)-3/80*sin(2*x))/(-sin(x)+3/10*cos(x)
-1/16*sin(2*x)))'; % x=300*t
fplot(fun,[3/2 2]*pi)
hold on
fplot('pi/4',[3/2 2]*pi,'r'), grid
title('Andamento angolo velocità-asse x')
xlabel('\omega*t'), ylabel('angolo \alpha')

Per risolvere l’equazione


conviene portare
a secondo membro 
ed applicare la 4
funzione tan ad entrambi
i membri.
Istruzioni Matlab
Nell’equazione, si pone x   t
1 3   3 1 
 cos  x   sin  2 x   
/  sin  x   cos  x   sin  2 x   1  0
2 80   10 16 
clear all;clc;close all
nmax=15;
toll=1e-14;
fun ='((1/2*cos(x)-3/80*sin(2*x))/(-sin(x)+3/10*cos(x)-1/16*sin(2*x)))-
1'; % è stata trasformata l’equazione applicando tan ai due membri
% dopo avere portato pi/4 a secondo membro
% fplot(fun,[3/2*pi,2*pi])
% hold on
% fplot('0',[3/2*pi,2*pi],'r')
x0=input('x0= ') % si assume x0= 6;
f1= '(-0.5*sin(x)-3/40*cos(2*x))*(-sin(x)+3/10*cos(x)-1/16*sin(2*x))';
f2= '(0.5*cos(x)-3/80*sin(2*x))*(-cos(x)-3/10*sin(x)-2/16*cos(2*x))';
f5='(-sin(x)+3/10*cos(x)-1/16*sin(2*x))^2';
f3=[f1 '/' f5];f4=[f2 '/' f5];
dfun = [f3 '-' f4];
[xvect,xdiff,fx,it,p,c]=Newton(x0,nmax,toll,fun,dfun);
Risultati e Commenti
% tabella risultati
iter=0:it;
fprintf('iter x_app x_diff fx\n')
tab=[iter' xvect xdiff fx];
fprintf('%3d %15.12f %18.8e %18.8e \n',tab')
Numero di Iterazioni : 6
Radice calcolata : 6.0948088361539705e+000
Ordine stimato : 2.0004439291177616
Fattore di riduzione : 2.0903123955317979
iter x_app x_diff fx
0 6.000000000000 0.00000000e+000 1.67712750e-001
1 6.112799792027 1.12799792e-001 3.94692370e-002
2 6.095485190564 1.73146015e-002 1.43020061e-003
3 6.094809786610 6.75403954e-004 2.00698736e-006
4 6.094808836156 9.50453654e-007 3.96305211e-012
5 6.094808836154 1.87672100e-012 0.00000000e+000
6 6.094808836154 0.00000000e+000 0.00000000e+000

% il valore approssimato dell’angolo x (si ricordi la


% trasformazione effettuata!!!) è circa 6.0948 radianti, cioè
% circa 349°; il tempo t* richiesto si otterrà valutando il
% rapporto x(end)/300.
Posizione del corpo in
corrispondenza della soluzione
Rappresentazione della soluzione

Vc
y αc= π/4

O B
x
φ
φ

D
ωt
ω A B2
B1

Potrebbero piacerti anche