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(0),D(F)(0),expand((D@@2)(F)(0));
> T4:=add((1/j!*expand((D@@j)(F)(0)),j=0..4));
Esim: Approksimoi funktiota
> f:=(x,y)->sqrt(x^2+y^3);
2. asteen Taylorin polynomilla. Arvioi sillä lukua.
> 'sqrt('1.02'^2+'1.97'^3)';
Tapa 1 : Puhdas "käsinlasku"
> f:=(x,y)->sqrt(x^2+y^3); p:=1,2:
> D1f:=D[1](f)(p);D2f:=D[2](f)(p);
> D11f:=D[1,1](f)(p);D12f:=D[1,2](f)(p);D22f:=D[2,2](f)(p);
> T2:=f(p)+D1f*h1+D2f*h2+1/2*D11f*h1^2+D12f*h1*h2+1/2*D22f*h2^2;
Sijoitetaan nyt lukuarvot T2:een:
> subs(h1=.02,h2=-.03,T2);
> tarkka:=f(1.02,1.97);
> %-%%;
Varsin vaikuttava tarkkuus.
Usein haluamme Taylorin polynomin x:n ja y:n avulla:
> T2xy:=subs(h1=x-1,h2=y-2,T2);
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);
> mtaylor(f(x,y),[x=1,y=2],3);
Sama harmi 1. asteen termeihin nähden. "Kauneusvirhe" voidaan hoitaa palaamalla h1h2-muotoon:
> subs(x=1+h1,y=2+h2,%);
> 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);
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));
> plot3d(f(x,y)-T2xy,x=1-H..1+H,y=2-H..2+H);
>
> H:=H/2:plot3d(f(x,y)-T2xy,x=1-H..1+H,y=2-H..2+H);
Käsittämättömän hyvä approksimaatio, vaikka H on jopa 1.