Luennot viikolla 5

Lv5.mws 1-3.2.2000

Taylorin lause

> restart: varit:=[grey,blue,red,black,green,navy,plum];

[Maple Math]

> with(plots):

> P:=n->sum((D@@k)(f)(x0)*(x-x0)^k/k!,k=0..n);
R:=n->(D@@(n+1))(f)(xi)*(x-x0)^(n+1)/(n+1)!;

[Maple Math]

[Maple Math]

> f:='f':taylor(f(x),x=a,5);

[Maple Math]
[Maple Math]

> Q:=convert(%,polynom);

[Maple Math]

> x0:=0:f:=sin;eval(P(7));R(7);

[Maple Math]

[Maple Math]

[Maple Math]

Koska parilliset potenssit puuttuvat, niin P(7)=P(8), joten voidaan käyttää "tehokkaampaa" virhetermiä: (Tietenkään piste [Maple Math] ei ole sama.)

> R(8);

[Maple Math]

> plot([sin(x),P(1),P(3),P(5)],x=-Pi..Pi,color=varit,thickness=[1,2,2,3]);varit;

[Maple Math]

>

> f:=x->exp(-x)*sin(x);x0:=0;P(7):

> plot([f(x),P(1),P(2),P(3),P(4),P(5)],x=0..2):

[Maple Math]

[Maple Math]

Esim: approksimoidaan e=exp(1):tä:

[Maple Math] + [Maple Math]

Kts. myös: . ./L/Lv5mlb.html

> seq(evalf(3/(n+1)!),n=0..10);

[Maple Math]
[Maple Math]

Siis 10 termiä (asteluku 9) riittää.

> f:=x->exp(-x^2);

> plot((D@@10)(f),0..1);

> (D@@10)(f)(0);

> P(10);

> varit:

[Maple Math]

[Maple Math]

[Maple Math]

>

Yksikäsitteisyyslause ja muita tapoja muodostaa kehitelmiä

> taylor(1/(1-x),x=0,10);

[Maple Math]

> f:=x->1/(1-x);

[Maple Math]

> P(10);R(10);

[Maple Math]

[Maple Math]

>

RA Esim 13.2.1 (Esitetään luennolla heti e:n appr. jälkeen)

Samanlainen kuin sin edellä, mutta formuoidaan kunnolla.

(... luennolla ...)

> f:=cos: R(2*k+1);

[Maple Math]

Voidaan ja on syytä aina käyttää paritonasteiseen liittyvää jäännöstermiä (miksi?). Arvio ylöspäin:

> xi:=Pi/4;

[Maple Math]

> seq(R(2*k+1),k=1..5);

[Maple Math]

Max-arvo saavutetaan, kun x on välin päätepiste:

> x:=Pi/4;

[Maple Math]

> seq(R(2*k+1),k=1..5);

[Maple Math]

> evalf(%);

[Maple Math]

> x:='x':P(6);

[Maple Math]

> plot(cos(x)-P(6),x=-Pi/4..Pi/4);

> cos(x)-P(6);

[Maple Math]

> subs(x=Pi/4,%);evalf(%);

[Maple Math]

[Maple Math]

Todellinen virhe on pienempi, mutta ainoastaan n. 1/3 virhearvion antamasta, toimii siis tässä tapauksessa varsin hyvin.

Katsotaan, mitä voi tapahtua, kun ollaan riittävän kaukana kehityskeskuksesta.

> for n to 10 do P[n]:=convert(taylor(1/x,x=1,n),polynom);od:

> seq(subs(x=3,P[k]),k=1..10);

[Maple Math]

Yritimme approksimoida funktion [Maple Math] arvoa pisteessä 3 Taylorin polynomeilla kehitettynä pisteessä 1.

Mitä enemmän nostamme astelukua, sen huonommaksi menee. Huom: Tässä ei ole pyöristysvirheillä osuutta, kaikki laskenta on täysin tarkkaa.

Tämä on sikäli luonnollista, että 1/x on singulaarinen 0;ssa, joten on epärealistista toivoa, että yksikön päässä kehityskeskukseta tai sitä kauempana mikään toimisi.

Jos sensijaan otetaan lähempää kuin yksikön päästä kehityskeskuskesta, näyttää suppenemista tapahtuvan, tosin hitaasti, jos etäisyys keskuksesta on lähes 1.

(Siis tässä tapauksessa, jossa kehityskeskuksen etäisyys singulaaripisteestä =1 .)

> seq(subs(x=1.9,P[k]),k=1..10); 1/1.9;

[Maple Math]

[Maple Math]

Tarvitaan muutama termi lisää, näin kaukana suppeneminen on hidasta.

>

Interpolaatio

> restart:

Esim: USA:n Census-data

> T:=linspace(1940,1990,6);

> T:=[1940,1950,1960,1970,1980,1990];

> P:=[132.165,151.326,179.323,203.302,226.542,249.633];nops(P);

Yksikkönä miljoona yksilöä.

> plot([seq([T[i],P[i]],i=1..nops(T))],style=point,symbol=circle);

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

Määritellään funktio, joka muodostaa Lagrangen kertojapolynomien jonon.
xd on x-datapisteiden lista
x on piste, jossa lasketaan

> lag:=(xd,x)->seq(product((x-xd[k])/(xd[j]-xd[k]),k=1..j-1)*
product((x-xd[k])/(xd[j]-xd[k]),k=j+1..nops(xd)),j=1..nops(xd));

Warning, `j` in call to `seq` is not local

[Maple Math]

> lagjono:=lag([a,b,c],x);

[Maple Math]

> p:=sum(y[i]*lagjono[i],i=1..3);

[Maple Math]

> subs(x=a,p),subs(x=b,p),subs(x=c,p);

[Maple Math]

>

> R:=x->(D@@nops(xd))(f)(xi)/nops(xd)!*product(x-xd[j],j=1..nops(xd));

[Maple Math]

> xd:=[0,1,2];f:=sin:R(x);

[Maple Math]

[Maple Math]

Esim: Interpoloidaan log-funktiota annetuissa pisteissä

> Digits;Digits:=3:xdata:=[9.0,9.5,11.0];ydata:=map(ln,xdata);

[Maple Math]

[Maple Math]

[Maple Math]

> lagjono:=lag(xdata,x);

[Maple Math]

> p:=sum(ydata[i]*lagjono[i],i=1..3);

[Maple Math]
[Maple Math]

> expand(%);

[Maple Math]

> funkuva:=plot([p,ln(x)],x=8..12,color=[red,blue]):

> data:=plot([seq([xdata[i],ydata[i]],i=1..nops(xdata))],style=point,symbol=circle):

> display([funkuva,data]);

Ohhoh! Mikäs nyt vikana? No laskentatarkkuus ei riittänyt. Palataan oletustarkkuuteen.

> Digits:=10:

> xdata:=[9.0,9.5,11.0];ydata:=map(ln,xdata);

[Maple Math]

[Maple Math]

> lagjono:=lag(xdata,x);p:=sum(ydata[i]*lagjono[i],i=1..3);

[Maple Math]
[Maple Math]
[Maple Math]

[Maple Math]
[Maple Math]
[Maple Math]

> expand(%);

[Maple Math]

> with(plots):

> funkuva:=plot([p,ln(x)],x=8..12,color=[red,blue]):

> data:=plot([seq([xdata[i],ydata[i]],i=1..nops(xdata))],style=point,symbol=circle):display([funkuva,data]);

> plot(ln(x)-p,x=8..12);

Maplen valmis funktio interp

> restart: xdata:=[9.0,9.5,11.0];ydata:=map(ln,xdata);interp(xdata,ydata,x);

[Maple Math]

[Maple Math]

[Maple Math]

> ydata:=map(convert,ydata,rational);xdata:=map(convert,xdata,rational);

[Maple Math]

[Maple Math]

> interp(xdata,ydata,x);

[Maple Math]

Tämä funktio on pienimuotoiseen opiskeluun lähinnä. Käytännössä ei polynomeja kerrota auki, se voi lisätä tuntuvasti laskutyötä ja lisätä tuntuvasti pyöristysvirheiden vaikutusta, polynimit kasvavat ja heilahtelevat voimakkaasti, jos x on suurehkokin.

>

>

>

>