Professional Documents
Culture Documents
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
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
>>
>>
>>
>>
>>
>>
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
********
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
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
>>
>>
>>
>>
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]
**********************************
Calcolare unapprossimazione di
1
ln xdx utilizzando il metodo:
x
1
>>
>>
>>
>>
>>
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]
********
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
clear,clc
syms x real
format long e
ve=double(int(exp(sqrt(x))/sqrt(x),0,1))
>>
>>
>>
>>
>>
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'
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
>> 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']