Sei sulla pagina 1di 9

Esercitazioni di Calcolo Numerico

Antonio Galli

Lezione 6

DERIVAZIONE ED
INTEGRAZIONE
6.1 DERIVAZIONE NUMERICA
Calcolare unapprossimazione della derivata prima della funzione y = e x nel
punto x = 0.25 utilizzando, con un passo h = 0.05, le formule alle differenze:
- in avanti;
- centrate;
- allindietro.
Determinare il minimo numero di cifre esatte delle approssimazioni calcolate.
********
>> format short e
>> f='exp(-x)';f1=diff(f)
>> x=0.25;ve=eval(f1)
>>
>>
>>
>>

a=[.25 .30];o=exp(-a);
dc=(o(2)-o(1))/.05
ea=abs(ve-da)
s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1

>>
>>
>>
>>

a=[.20 .30];o=exp(-a);
dc=(o(2)-o(1))/.1
ea=abs(ve-dc)
s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1

>>
>>
>>
>>

a=[.20 .25];o=exp(-a);
di=(o(2)-o(1))/.05
ea=abs(ve-di)
s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1

**********************************
Calcolare unapprossimazione delle derivate prima e seconda della funzione
y = ln x punto x = 1.5 utilizzando la formula alle differenze centrate ed un passo
h = 0.2 , 0.1 , 0.05 , 0.025. Determinare per ogni approssimazione calcolata il
numero minimo di cifre esatte.
********

>> clear,clc

2
>>
>>
>>
>>

format short e
f='log(x)';f1=diff(f),f2=diff(f1),
x=1.5;ve1=eval(f1),ve2=eval(f2)
h=.2;a=[1.5-h 1.5 1.5+h];o=log(a);

>> dc=(o(3)-o(1))/.4,ea=abs(dc-ve1)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> d2c=(o(3)-2*o(2)+o(1))/(.2)^2,ea=abs(d2c-ve2)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
>> h=.1;a=[1.5-h 1.5 1.5+h];o=log(a);
>> dc=(o(3)-o(1))/.2,er=abs(dc-ve1)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> d2c=(o(3)-2*o(2)+o(1))/(.1)^2,er=abs(d2c-ve2)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
>> h=.05;a=[1.5-h 1.5 1.5+h];o=log(a);
>> dc=(o(3)-o(1))/.1,ea=abs(dc-ve1)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> d2c=(o(3)-2*o(2)+o(1))/(.05)^2,er=abs(d2c-ve2)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
>> h=.025;a=[1.5-h 1.5 1.5+h];o=log(a);
>> dc=(o(3)-o(1))/.05,er=abs(dc-ve1)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> d2c=(o(3)-2*o(2)+o(1))/(.025)^2,er=abs(d2c-ve2)
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
**********************************
Data la funzione f di equazione y = e x la derivata prima di f : __________ ,
la derivata seconda : ________________________. Utilizzando le formule alle
differenze centrate con h = 0.01 si ottiene come approssimazione delle derivate
della funzione nei nodi di suddivisione dellintervallo [0 0.05] i valori riportati
nella seguente tabella:
2

x
f'
f ''

0.01

0.02

0.03

0.04

0.05

Esercitazioni di Calcolo Numerico


Antonio Galli

I valori esatti delle derivate nel punto x = 0.05 sono : f '(0.05) = ______________ ,
f ''(0.05) = ______________ . Gli errori commessi approssimandole derivate in
x = 0.05 mediante le formule alle differenze centrate sono _____________ per la
derivata prima e ______________ per la derivata seconda. Il minimo numero di
cifre corrette nelle due approssimazioni sono: _____________ e _____________ .
Output in format long e.
********
>>
>>
>>
>>

clear,clc
format long e
f='exp(x^2)';f1=diff(f),f2=diff(f,2)
x=0.05;f1=eval(f1),f2=eval(f2)

>> a=-.01:.01:.06;o=exp(a.^2);
>> for k=2:7,d1(k-1)=(o(k+1)-o(k-1))/.02;
d2(k-1)=(o(k+1)-2*o(k)+o(k-1))/(.01)^2;end
>> [d1' d2']
>> ea=abs(f1-d1(end))
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> ea= abs(f2-d2(end))
>> s=0;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
**********************************
Data la funzione f di equazione y = ln 2 x la derivata prima di f : __________
la derivata seconda : ________________________. Utilizzando le formule alle
differenze centrate con h = 0.1 si ottiene come approssimazione delle derivate
della funzione nei nodi di suddivisione dellintervallo [1 1.5] i valori riportati
nella seguente tabella:
x
f'
f ''

1.1

1.2

1.3

1.4

1.5

I valori esatti delle derivate nel punto x = 1.5 sono : f '(1.5) = ________________ ,
f ''(1.5) = __________________ . Gli errori commessi approssimando le derivate in
x = 1.5 mediante le formule alle differenze centrate sono _______________ per la
derivata prima e __________________ per la derivata seconda. Il minimo numero
di cifre corrette nelle due approssimazioni sono: _____________ e _____________
Output in format long e.
********

>> clear,clc
>> f='log(x)^2';f1=diff(f),f2=diff(f,2)

4
>>
>>
>>
>>

format long e
x=1.5;f1=eval(f1),f2=eval(f2)
a=0.9:.1:1.6;o=log(a).^2;
for k=2:7,d1(k-1)=(o(k+1)-o(k-1))/.2;
d2(k-1)=(o(k+1)-2*o(k)+o(k-1))/(.1)^2;end
>> [d1' d2']
>> ea=abs(f1-d1(end))
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> ea= abs(f2-d2(end))
>> s=-1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
6.2 INTEGRAZIONE NUMERICA
Calcolare unapprossimazione del seguente integrale definito:

ln xdx = 1 .
1

Calcolare, per ogni approssimazione il numero di cifre corrette rispetto al valore


esatto. Output in format long e.
********
Approssimando la funzione integranda con una funzione costante pari al valore
assunto nel punto medio si ottiene la formula del punto medio
o del rettangolo:

>>
>>
>>
>>
>>
>>

clear,clc
format long e
a=1;b=exp(1);f='log(x)';x=a+(b-a)/2;fm=eval(f);
t=linspace(1,exp(1),1000);y=log(t);
plot([a b],[fm fm],t,y)
ap=(b-a)*fm,ea=abs(1-ap)

>> s=0;n=0;
>> while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
Approssimando la funzione integranda con una retta ed integrando si ottiene la
formula dei Trapezi:

>> x=a;fa=eval(f);x=b;fb=eval(f);
>> plot([a b],[fa fb],t,y)
>> ap=(b-a)/2*(fa+fb),ea=abs(1-ap)
>> s=-1;n=0;
>> while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1

Esercitazioni di Calcolo Numerico


Antonio Galli

********
Approssimando la funzione integranda con una parabola ed integrando si ottiene la
formula di Simpson:
>>
>>
>>
>>
>>
>>

x=a;fa=eval(f);x=b;fb=eval(f);
x=a+(b-a)/2;fm=eval(f);
va=[a x b];vo=log(va);
c=polyfit(va,vo,2);p=polyval(c,t);
plot(t,p,t,y)
ap=(b-a)/6*(fa+4*fm+fb),ea=abs(1-ap)

>> s=-1;n=0;
>> while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
**********************************
Calcolare unapprossimazione di

e x dx utilizzando tre valutazioni funzionali


1

>> format long e,a=1;b=3;ve=exp(b)-exp(a),


>> x=linspace(a,b,3);y=exp(x);
Utilizzando il metodo dei trapezi si ottiene:
>> h=(b-a)/2;at=h/2*(y(1)+2*y(2)+y(3))
>> ea=abs(ve-at)
>> s=1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
Utilizzando il metodo di Simpson si ottiene:
>> as=(b-a)/6*(y(1)+4*y(2)+y(3))
>> ea=abs(ve-as)
>> s=1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
Utilizzando la formula gaussiana con tre nodi si ottiene:
>> help quadlege
>> n=3;f='exp(x)';ag=quadlege(a,b,n,f)
>> ea=abs(ve-ag)
>> s=1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
********
Utilizzando formula gaussiana mediante valori tabulati si ottiene:
>> agt=0.5555555556*exp(((b-a)*0.7745966692+a+b)/2)+

6
0.5555555556*exp((-(b-a)*0.7745966692+a+b)/2)+
0.8888888889*exp((a+b)/2);
>> agt=agt*(b-a)/2
>> ea=abs(ve-agt)
>> s=1;n=0;while ea<0.5*10^(s-n+1),n=n+1;end,n=n-1
ag e agt NON sono identici fino alla 15a cifra pur mantenendo lo stesso
numero di cifre significative
**********************************
Calcolare unapprossimazione di

x 1
dx utilizzando il metodo dei trapezi
x

suddividendo lintervallo di integrazione con 11 , 21 , 41 ,81 , 161 nodi


equispaziati. Calcolare, per ogni approssimazione il numero di cifre corrette
rispetto al valore esatto. Output in format long e.
********

>>
>>
>>
>>

clear,clc
syms x real
format long e
ve=double(int((x-1)/x,1,2))

>>
>>
>>
>>

x=linspace(1,2,11);y=1-1./x;
help trapz
ap=trapz(x,y),e1=abs(ve-ap)
s=-1;n=0;while e1<0.5*10^(s-n+1),n=n+1;end,n=n-1

>> x=linspace(1,2,21);y=1-1./x;
>> ap=trapz(x,y),e2=abs(ve-ap)
>> s=-1;n=0;while e2<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> x=linspace(1,2,41);y=1-1./x;
>> ap=trapz(x,y),e3=abs(ve-ap)
>> s=-1;n=0;while e3<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> x=linspace(1,2,81);y=1-1./x;
>> ap=trapz(x,y),e4=abs(ve-ap)
>> s=-1;n=0;while e4<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> x=linspace(1,2,161) ;y=1-1./x;
>> ap=trapz(x,y),e5=abs(ve-ap)
>> s=-1;n=0;while e5<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> format
>> [e1/e2

e2/e3

e3/e4

e4/e5]

Esercitazioni di Calcolo Numerico


Antonio Galli

**********************************
Calcolare unapprossimazione di

1
ln xdx utilizzando il metodo:
x
1

dei trapezi suddividendo lintervallo [1 e] con 11 , 21 , 41 nodi equispaziati;


di Simpson suddividendo lintervallo [1 e] con 5 , 9 , 17 nodi equispaziati.
Calcolare, per ogni approssimazione il numero di cifre corrette rispetto al valore
esatto. Output in format long e.
********

>>
>>
>>
>>
>>

clear,clc
syms x real
format long e
ve=double(int(sqrt(log(x))/x,1,exp(1)))
f='sqrt(log(x))./x';

>> x=linspace(1,exp(1),11);y=eval(f);
>> ap=trapz(x,y),e1=abs(ve-ap)
>> s=-1;n=0;while e1<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> x=linspace(1,exp(1),21); y=eval(f);
>> ap=trapz(x,y),e2=abs(ve-ap)
>> s=-1;n=0;while e2<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> x=linspace(1,exp(1),41); y=eval(f);
>> ap=trapz(x,y),e3=abs(ve-ap)
>> s=-1;n=0;while e3<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> [e1/e2

e2/e3]

********

>> help simpson


>>
>>
>>
>>

ap=simpson(1,exp(1),5,f),e1=abs(ve-ap)
s=-1;n=0;while e1<0.5*10^(s-n+1),n=n+1;end,n=n-1
ap=simpson(1,exp(1),9,f),e2=abs(ve-ap)
s=-1;n=0;while e2<0.5*10^(s-n+1),n=n+1;end,n=n-1

>> ap=simpson(1,exp(1),17,f),e3=abs(ve-ap)
>> s=-1;n=0;while e3<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> [e1/e2

e2/e3]

**********************************

Calcolare unapprossimazione di

dx utilizzando il metodo del punto

medio suddividendo lintervallo di integrazione con 50 , 100, 200 intervalli


di uguale ampiezza. Calcolare, per ogni approssimazione il numero di cifre
corrette rispetto al valore esatto. Output in format long e.
********
>>
>>
>>
>>

clear,clc
syms x real
format long e
ve=double(int(exp(sqrt(x))/sqrt(x),0,1))

>> help midpto


>> f='exp(sqrt(x))./sqrt(x) ';
>> ap=midpto(0,1,51,f),e1=abs(ve-ap)
>> s=0;n=0;while e1<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> ap=midpto(0,1,101,f),e2=abs(ve-ap)
>> s=0;n=0;while e2<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> ap=midpto(0,1,201,f),e3=abs(ve-ap)
>> s=0;n=0;while e3<0.5*10^(s-n+1),n=n+1;end,n=n-1
>> [e1/e2 e2/e3]
**********************************
Calcolare unapprossimazione di

cos x 2 dx utilizzando il metodo dei


0

trapezi suddividendo lintervallo con 2 , 3 , 4 , 5 , ., 11 nodi equispaziati.


Stabilire il numero cifre esatte rispetto al valore esatto.
Output in format long e.
********

>>
>>
>>
>>
>>

clear,clc
syms x real
format long e
f='cos(pi*x.^2)';
for n=2:11,x=linspace(0,sqrt(2),n);y=eval(f);
ap(n-1)=trapz(x,y);end,ap'

>> clear x, syms x real


>> ve=double(int(cos(pi*x.^2),0,sqrt(2)))
>> s=-1;for k=1:10,ea(k)=abs(ve-ap(k));n(k)=0;

Esercitazioni di Calcolo Numerico


Antonio Galli

while ea(k)<0.5*10^(s-n(k)+1),n(k)=n(k)+1;end,
n(k)=n(k)-1;end,[ea' n']
**********************************
Calcolare unapprossimazione di

sin ( cos x ) dx utilizzando il metodo dei

trapezi suddividendo lintervallo con 51 , 52 , 53 , ., 60 nodi equispaziati.


Determinare dalla seconda approssimazione in poi, il numero di cifre esatte rispetto
allapprossimazione precedente. Output in format long e.
********

>> clear,clc
>> syms x real
>> format long e
f='sqrt(sin(pi*cos(x)))';
>> for n=1:10,x=linspace(0,pi/2,n+50);y=eval(f);
ap(n)=trapz(x,y);end,ap'
>> s=0;for k=1:9,ea(k)=abs(ap(k+1)-ap(k));n(k)=0;
while ea(k)<0.5*10^(s-n(k)+1),n(k)=n(k)+1;end,
n(k)=n(k)-1;end,[ea' n']