L/mtaylor.mws "multitaylor"

7.3.2002 HA

> restart:

Warning, the name changecoords has been redefined

> with(linalg): with(LinearAlgebra): with(plots):

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the assigned name GramSchmidt now has a global binding

> setoptions3d(axes=boxed,orientation=[-30,50]):

Taylorin lause

Taylorin lauseen johto Maplella:

Voimme toistaa Maplella sen, mitä teimme eilen taululla. Homma toimii mainiosti, koska Maple osaa ketjusäännön.

Olkoon (a,b) tason piste ja (h1,h2) lisäysvektori. Nämä ovat koko tarkastelun ajan kiinteitä.

> a:='a':b:='b':h1:='h1':h2:='h2':f:='f':

> F:=t->f(a+t*h,b+t*k);

F := proc (t) options operator, arrow; f(a+t*h,b+t*...

> F(0),D(F)(0),expand((D@@2)(F)(0));

f(a,b), D[1](f)(a,b)*h+D[2](f)(a,b)*k, D[1,1](f)(a,...

> T4:=add((1/j!*expand((D@@j)(F)(0)),j=0..4));

T4 := f(a,b)+D[1](f)(a,b)*h+D[2](f)(a,b)*k+1/2*D[1,...
T4 := f(a,b)+D[1](f)(a,b)*h+D[2](f)(a,b)*k+1/2*D[1,...
T4 := f(a,b)+D[1](f)(a,b)*h+D[2](f)(a,b)*k+1/2*D[1,...

Esim: Approksimoi funktiota

> f:=(x,y)->sqrt(x^2+y^3);

f := proc (x, y) options operator, arrow; sqrt(x^2+...

2. asteen Taylorin polynomilla. Arvioi sillä lukua.

> 'sqrt('1.02'^2+'1.97'^3)';

sqrt(('1.02')^2+('1.97')^3)

Tapa 1 : Puhdas "käsinlasku"

> f:=(x,y)->sqrt(x^2+y^3); p:=1,2:

f := proc (x, y) options operator, arrow; sqrt(x^2+...

> D1f:=D[1](f)(p);D2f:=D[2](f)(p);

D1f := 1/3

D2f := 2

> D11f:=D[1,1](f)(p);D12f:=D[1,2](f)(p);D22f:=D[2,2](f)(p);

D11f := 8/27

D12f := -2/9

D22f := 2/3

> T2:=f(p)+D1f*h1+D2f*h2+1/2*D11f*h1^2+D12f*h1*h2+1/2*D22f*h2^2;

T2 := 3+1/3*h1+2*h2+4/27*h1^2-2/9*h1*h2+1/3*h2^2

Sijoitetaan nyt lukuarvot T2:een:

> subs(h1=.02,h2=-.03,T2);

2.947159259

> tarkka:=f(1.02,1.97);

tarkka := 2.947163552

> %-%%;

.4293e-5

Varsin vaikuttava tarkkuus.

Usein haluamme Taylorin polynomin x:n ja y:n avulla:

> T2xy:=subs(h1=x-1,h2=y-2,T2);

T2xy := -4/3+1/3*x+2*y+4/27*(x-1)^2-2/9*(x-1)*(y-2)...

Maplen automaattinen sieventäjä on hiema liian innokas, kertoo väkisin 1. asteen termit auki.

Käytetään sitten valmista mtaylor -funktiota:

> f(x,y);

sqrt(x^2+y^3)

> mtaylor(f(x,y),[x=1,y=2],3);

-4/3+1/3*x+2*y+4/27*(x-1)^2-2/9*(x-1)*(y-2)+1/3*(y-...

Sama harmi 1. asteen termeihin nähden. "Kauneusvirhe" voidaan hoitaa palaamalla h1h2-muotoon:

> subs(x=1+h1,y=2+h2,%);

3+1/3*h1+2*h2+4/27*h1^2-2/9*h1*h2+1/3*h2^2

> H:=2: # Valittava näinkin suuri H, jotta pinnat erottuisivat toisistaan.

> plot3d({f(x,y),T2xy},x=1-H..1+H,y=2-H..2+H);

[Maple Plot]

Kaksi pintapiirrosta voi yhdistää myös suoraan plot3d-komennossa, jolloin ei tarvita display-komentoa. Tällöin on käytettävä { }-sulkuja, sillä [ ]-sulut ymmärretään parametripintapiirrokseen liittyväksi. (Vastaavassa tilanteessa plot:ssa käy molemmat, mutta olen suositellut yleensä

hakasulkuja järjestyksen hallinnan vuoksi.

Toisaalta display-komento antaa paremmat mahdollisuudet säädellä eri kuvien ominaisuuksia (kuten väriä).

> H:=2:display(plot3d(f(x,y),x=1-H..1+H,y=2-H..2+H,color=blue),plot3d(T2xy,x=1-H..1+H,y=2-H..2+H,color=red));

[Maple Plot]

> plot3d(f(x,y)-T2xy,x=1-H..1+H,y=2-H..2+H);

>

[Maple Plot]

> H:=H/2:plot3d(f(x,y)-T2xy,x=1-H..1+H,y=2-H..2+H);

[Maple Plot]

Käsittämättömän hyvä approksimaatio, vaikka H on jopa 1.