Mat-1.414, V2 kevät 2000
Harjoitus no 2, to 3.2.
HA
- Tehtävä 3
Komennot
Kokeillaan ensin:
Esim: f=exp, x0=0
%%%%%%%%%%%%%%%%%%%%%%%%%%%
x0=0 % Tällöin:
derjono=[1,1,1,1,1,1];
x=-1:.25:1;
nimittaja=gamma(1+(0:length(derjono)-1))
kertoimet=derjono./nimittaja;
No nyt olemme valmiit kirjoittamaan funktioksi:
%%%%%%%%%%%%%% taypol.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function kertoimet=taypol(derjono)
% Lasketaan Taylorin polynomin kertoimet. Asteluku määräytyy
% derjonon pituudesta
% derjono: [f(x0),f'(x0),f''(x0),...]
% pisteet, joissa lasketaan
nimittaja=gamma(1+(0:length(derjono)-1));
kertoimet=derjono./nimittaja;
kertoimet=fliplr(kertoimet);
%%%%%%%%%%%%%% taypol.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ja sitten testaamaan:
% Esim: f=exp, x0=0
x0=0 % Tällöin:
derjono=[1,1,1,1,1,1];
x=-1:.25:1;
c=taypol(derjono);
y=polyval(c,x);
plot(x,y)
hold on
plot(x,exp(x),'r--')
c=taypol(ones(1,10));x=linspace(-1,3);y=polyval(c,x);
plot(x,y-exp(x));grid
Derivaattajono voidaan generoida Maplella:
Maple-istunto (vaikka tekstiMaple)
> f:=exp(x): [seq(eval(subs(x=0,diff(f,x$k))),k=1..10)];
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Matlab-istunto, leikkau/liimaus+editointi:
derjono= [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
c=taypol(derjono);
% jne ...
Taylorpolynomitaulukko
Vaikka näin:
m=length(x);n=length(derjono);
M=zeros(m,n); % Allokoidaan 0-matriisi.
for j=1:n, c=taypol(derjono(1:j));
M(:,j)=polyval(c,x)';
end;
Mexpx=[M exp(x)'];
>> Mexpx(1:10,:)
ans =
1.0000 0 0.5000 0.3333 0.3750 0.3667 0.3679
1.0000 0.0404 0.5008 0.3535 0.3889 0.3821 0.3830
1.0000 0.0808 0.5033 0.3738 0.4036 0.3981 0.3988
1.0000 0.1212 0.5073 0.3942 0.4191 0.4147 0.4153
1.0000 0.1616 0.5131 0.4148 0.4354 0.4320 0.4324
1.0000 0.2020 0.5204 0.4357 0.4526 0.4499 0.4502
1.0000 0.2424 0.5294 0.4569 0.4706 0.4686 0.4688
1.0000 0.2828 0.5400 0.4785 0.4895 0.4880 0.4881
1.0000 0.3232 0.5522 0.5006 0.5093 0.5081 0.5083
1.0000 0.3636 0.5661 0.5232 0.5300 0.5291 0.5292
Kannattaa kirjoittaa taypolval(derjono,x) , joka palauttaa
tuon taulukon. Helppitekstinä Maple-generointiohje.
Täydennystä harj. teht. 3:een
Numeerisen integroinnin (Simpson) oma Matlab-koodi:
function [S,R]=simpson(f,a,b,n,M4)
% HA joskus viime vuosituhannella
% Syötteet:f - integroitava funktio
% a,b - välin päätepisteet
% n - "pikkuv{lien lkm. parillinen,
% M4 - f(4):n itseisarvon. max
% Huom: M4:n määrittämiseen voidaan tarvita Maplea
% Tulokset: S Simpsonarvo, R virhearvio
h=(b-a)/n;
w=2*ones(1,n-1);w(1:2:n-1)=4*ones(1,n/2); % jos n pariton, niin ruma virheilmo
w=[1,w,1];
x=a:h:b;y=feval(f,x);
S=(h/3)*w*y';
if nargout==2
R=(M4*(b-a)*h^4)/180;
end;