H/ratk/harj 7.mws (AV ja LV )

2002 HA

Katso mallia myös luentotyöarkilta L/mtaylor.mws

> restart:

> 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

Warning, the name changecoords has been redefined

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

> alias(Tr=Transpose):

>

1 AV ja 2LV

> f:=(x,y)->cos(x+sin(y));

f := proc (x, y) options operator, arrow; cos(x+sin...

1. derivaatat:

Katsotaan ensin derivaattafunktioita, vaikka niitä ei Maplella laskettaessa tarvitsisi edes nähdä:

> D[1](f),D[2](f),D[1,1](f), D[1,1,2](f),D[1,2,2,2](f);

proc (x, y) options operator, arrow; -sin(x+sin(y))...
proc (x, y) options operator, arrow; -sin(x+sin(y))...
proc (x, y) options operator, arrow; -sin(x+sin(y))...

Lasketaan sitten systemaattisesti kehityspisteessä p=(0,0).

> p:=0,0;

p := 0, 0

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

D1f := 0

D2f := 0

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

D11f := -1

D12f := -1

D22f := -1

> D111f:=D[1,1,1](f)(p);D112f:=D[1,1,2](f)(p);D122f:=D[1,2,2](f)(p);D222f:=D[2,2,2](f)(p);

D111f := 0

D112f := 0

D122f := 0

D222f := 0

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

T2 := 1-1/2*h1^2-h1*h2-1/2*h2^2

> h1:=0.1: h2:=-0.2:

> T2;

.9950000000

> f(h1,h2);

.9951361296

> f(h1,h2)-T2;

.1361296e-3

Tämä on samalla suhteellinen virhe. Tässä tapauksessa, kun kolmannet derivaatat O:ssa ovat nollia, kyseessä on samalla 3. asteen Taylorin polynomi ja jäännöstermi on siten jopa || h^4|| O(h).

LV

"Tuotantoajossa" emme turhan takia ota väliapumuuttujia, vaan kirjoitamme suoraan:

> h1:='h1': h2:='h2':

> Tay[4]:=T2+(1/4!)*(D[1,1,1,1](f)(p)*h1^4+4*D[1,1,1,2](f)(p)*h1^3*h2+6*D[1,1,2,2](f)(p)*h1^2*h2^2+4*D[1,2,2,2](f)(p)*h1*h2^3+D[2,2,2,2](f)(p)*h2^4);

Tay[4] := 1-1/2*h1^2-h1*h2-1/2*h2^2+1/24*h1^4+1/6*h...

> mtaylor(f(x,y),[x=0,y=0],5);

1-1/2*x^2-y*x-1/2*y^2+1/24*x^4+1/6*y*x^3+1/4*y^2*x^...

Oikein meni, mutta alkaa olla tuskaista ja virhealtista.

Eleganteimmasta päästä oleva oma koodi olisi se, jonka kirjoitin työarkille mtaylor.mws

Tässä on sekin hienous, että käyttäjän tarvitsee tuntea vain 1. muuttujan Taylorin lause, Maple johtaa sen ja ketjusäännön avulla laskiessaan samalla kahden muuttujan kaavan.

Hintana tälle mukavuudella on

a) laskenta on aika hidasta ja b) tuossa jouduin hieman kokeilemaan oikeanlaista järjestystä komenoille.

1) Osaamme periaatteessa laskea käsin editoiden (tarpeen mukaan Maplea esim. binomikaavan laskijana hyödyntäen).

2) Opetteluvaiheen jälkeen tositarpeeseen voimme aina käyttää mtaylor -funktiota.

Katsotaan piirtämistä seuraavassa tehtävässä. Tässä voitaisiin tehdä aivan samoin, mutta antaapa olla.

2 AV ja 1 LV

> f:=(x,y)->1/(2+x-2*y);p:=(2,1);

f := proc (x, y) options operator, arrow; 1/(2+x-2*...

p := 2, 1

1. derivaatat:

Katsotaan ensin derivaattafunktioita, vaikka niitä ei Maplella laskettaessa tarvitsisi edes nähdä:

> D[1](f),D[2](f);

proc (x, y) options operator, arrow; -1/((2+x-2*y)^...

Lasketaan näiden arvot kehityspisteessä p:=(2,1):

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

D1f := -1/4

D2f := 1/2

2. derivaatat:

> D[1,1](f);

proc (x, y) options operator, arrow; 2*1/((2+x-2*y)...

Pysyvät käsinlaskukelpoisina, kun sisäfunktioista tulee vain vakioita. Lasketaan taas kehityspisteessä:

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

D11f := 1/4

D12f := -1/2

D22f := 1

3. derivaatat:

> D111f:=D[1,1,1](f)(p);D112f:=D[1,1,2](f)(p);D122f:=D[1,2,2](f)(p);D222f:=D[2,2,2](f)(p);

D111f := -3/8

D112f := 3/4

D122f := -3/2

D222f := 3

> T3:=f(p)+(D1f*h1+D2f*h2)+
(1/2)*(D11f*h1^2+2*D12f*h1*h2+D22f*h2^2)+
(1/3!)*(D111f*h1^3+4*D112f*h1^2*h2+4*D122f*h1*h2^2+D222f*h2^3);

T3 := 1/2-1/4*h1+1/2*h2+1/8*h1^2-1/2*h1*h2+1/2*h2^2...

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

T3 := 1/2-1/4*x+1/2*y+1/8*(x-2)^2-1/2*(x-2)*(y-1)+1...
T3 := 1/2-1/4*x+1/2*y+1/8*(x-2)^2-1/2*(x-2)*(y-1)+1...

> H:=0.6:display([plot3d(f(x,y),x=2-H..2+H,y=1-H..1+H),plot3d(T3,x=2-H..2+H,y=1-H..1+H,color=yellow)]);

[Maple Plot]

> display([plot3d(T3,x=2-H..2+H,y=1-H..1+H,color=yellow)]);

[Maple Plot]

3 AV

> restart:

Neliömuoto pääakselikoordinaattien avulla lausuttuna on

> q:=Sum(lambda[i]*y[i]^2,i=1..n);

q := Sum(lambda[i]*y[i]^2,i = 1 .. n)

4 AV

> alias(IdM=IdentityMatrix,IM=MatrixInverse):

> A:=<<a,c>|<c,b>>;

A := _rtable[7300004]

> p:=det(A-lambda*IdM(2)); # Tässä on käytettävä linalgin det-funktiota, LinearAlgebran Determinant menee kummallisen virheeseen.

p := det(-lambda*IdM(2)+_rtable[7300004])

> p:=collect(p,lambda); #p:=algsubs(a*b-c^2=detA,%);

p := det(-lambda*IdM(2)+_rtable[7300004])

> expand((lambda-lambda[1])*(lambda-lambda[2])): collect(%,lambda);

lambda^2+(-lambda[2]-lambda[1])*lambda+lambda[1]*la...

(Karakteristisen polynomin korkeimman asteen termin kerroin on (-1)^n, tässä n=2.)

5 AV , 3LV

> f:=x^3+y^3-3*x*y;g:=grad(f,[x,y]);

f := x^3+y^3-3*x*y

g := grad(x^3+y^3-3*x*y,[x, y])

Lasketaan ensin "käsin":

x^2 =y

y^2=x

=> x^4 = x => x=0 tai x=1

Saadaan pisteet (0,0) ja (1,1). Nämä ovat KRP:t.

Katsotaan, miten Maplen solve pärjää:

> ratkaisujoukot:=solve({g[1]=0,g[2]=0},{x,y});#allvalues(%[3]);

ratkaisujoukot := {y = y, x = x, grad(x^3+y^3-3*x*y...

Saatiin samat reaaliset ratkaisut ja lisäksi muotoa RootOf olevia polynomiyhtälöitä:

> ratkaisujoukot[3];

grad(x^3+y^3-3*x*y,[x, y])[2] = 0

> allvalues(%);

grad(x^3+y^3-3*x*y,[x, y])[2] = 0

Komento allvalues yrittää ratkaista RootOf-muotoja ja onnistuu saamaan kompleksiratkaisuja. Niistä emme ole kiinnostuneita. Onneksi osasimme päätellä, että tuossa yllä olivat kaikki reaaliset ratkaisut, tiedämme siten, että tässä tapauksessa Maple löysi ne kaikki. (No, tehtävä ei ollut vaikea!)

> KRP:=<0,0>,<1,1>;

KRP := _rtable[7406764], _rtable[7406804]

> H:=Matrix(hessian(f,[x,y]));H00:=subs(x=0,y=0,H);H11:=subs(x=1,y=1,H);

Error, (in Matrix) dimension parameters are required for this form of initializer

H00 := H

H11 := H

Käsin laskiessa päästään vähällä laskemalla det:

> det(H00);

det(H)

Maplella voidaan yhtä hyvin laskea suoraan ominaisarvot.

> Eigenvalues(H00);

Eigenvalues(H)

Johtopäätös on sama: ominaisarvot erimerkkiset, joten (0,0) on satulapiste.

> det(H11),trace(H11);

det(H)

Trace laskee diagonaalialkioiden summan (tietysti riittää katsahtaa matriisiin päin nähdäkseen, että molemmat diagonaalialkiot ovat positiivisia).

Katsotaan nyt vielä suoraan:

> Eigenvalues(H11);

Eigenvalues(H)

Varmaakin varmemmin: ominaisarvot positiiviset => (1,1) on min-piste.

> H:=0.5:plot3d(f,x=-H..H,y=-H..H,style=patchcontour,title="Satulapiste (0,0)");plot3d(f,x=1-H..1+H,y=1-H..1+H,style=patchcontour,title="Minimipiste (1,1)");

>

[Maple Plot]

[Maple Plot]

Siistiä!

> plot3d(f,x=-2..3,y=-2..3,style=patchcontour,title="Laajempi alue");

[Maple Plot]

>

4 LV

> f:=cos(x)+cos(y):

> nablaf:=grad(f,[x,y]);

nablaf := grad(cos(x)+cos(y),[x, y])

KRP: sin(x)=0

sin(y)=0

Ratk: x = m*Pi , y = n*Pi .

Lasketaan Hessen matriisi kriittisissä pisteissä. Tehdään laskut "käsin"

> H:=Matrix([[f11,f12],[f12,f22]]);

H := _rtable[7759808]

> f11:=diff(nablaf[1],x);f12:=diff(nablaf[1],y);f22:=diff(nablaf[2],y);

f11 := diff(grad(cos(x)+cos(y),[x, y])[1],x)

f12 := diff(grad(cos(x)+cos(y),[x, y])[1],y)

f22 := diff(grad(cos(x)+cos(y),[x, y])[2],y)

> H;

_rtable[7759808]

> Hkrp:=<<(-1)^(m+1),0>|<0,(-1)^(n+1)>>;

Hkrp := _rtable[7835484]

Matriisi on diagonaalimatriisi, joten tehtävä on valmiiksi pääakselimuodossa (ominaisarvot päälävistäjällä).

Päätelmät:

Koska näemme funktiosta suoraan, että -2 < = f(x,y) <= 2 ja paikalliset min/max-arvot ovat -2 ja 2, niin paikalliset ääriarvot ovat globaaleja koko R^2:ssa.

Pisteiden vuorottelu tasossa voidaan vaikka esittää matriisina, jossa 1 tarkoitta maksimia, -1 minimiä ja 0 satulapistettä.

> <<-1,0,-1>|<0,1,0>|<-1,0,-1>>;

_rtable[7921280]

Keskimmäimmäinen 1 edustaa O:a (m ja n parillisia).

Matriisia vastaava pintakuva ja korkeuskäyräkuva:

> plot3d(f,x=-Pi..Pi,y=-Pi..Pi,axes=box,style=patchcontour);

[Maple Plot]

> contourplot(f,x=-Pi..Pi,y=-Pi..Pi,axes=box);

contourplot(cos(x)+cos(y),x = -Pi .. Pi,y = -Pi .. ...

> plot3d(f,x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,axes=box,style=patchcontour);

[Maple Plot]

Maple-ratkaisu

Edellä laskimme Maplella "käsin". Tyypillinen Mapleratkaisu voisi edetä seuraavaan tapaan:

> f:=cos(x)+cos(y);g:=Vector(grad(f,[x,y]));H:=Matrix(hessian(f,[x,y]));

f := cos(x)+cos(y)

Error, (in Vector) dimension parameter is required for this form of initializer

Error, (in Matrix) dimension parameters are required for this form of initializer

> KRP:=[x=0,y=0],[x=0,y=Pi],[x=Pi,y=0],[x=Pi,y=Pi];

KRP := [x = 0, y = 0], [x = 0, y = Pi], [x = Pi, y ...

Tämän teimme kuitenkin "käsin". Tässä on kaikki mahdollisuudet Hessen matriiseisksi:

> H1:=subs(KRP[1],H);H2:=subs(KRP[2],H);H3:=subs(KRP[3],H);H4:=subs(KRP[4],H);

H1 := _rtable[7759808]

H2 := _rtable[7759808]

H3 := _rtable[7759808]

H4 := _rtable[7759808]

Loppu, kuten "käsinlaskussa".

5 LV

Tilavuus: V.

Sivu- ja kansimateriaali: a mk/m^2

Pohjamateriaali: 2a mk/m^2

> restart:

> with(plottools);with(plots):

[arc, arrow, circle, cone, cuboid, curve, cutin, cu...
[arc, arrow, circle, cone, cuboid, curve, cutin, cu...
[arc, arrow, circle, cone, cuboid, curve, cutin, cu...

Warning, the name changecoords has been redefined

> display(cuboid([0,0,0],[1,1,1])):

> x*y*z=V;

x*y*z = V

Kustannusfunktio: pohja*2a + (sivut+kansi)*a

> f:=(x,y,z)->x*y*2*a + (2*x*z+2*y*z+x*y)*a ;

>

f := proc (x, y, z) options operator, arrow; 2*x*y*...

Tilavuusehdon perusteella voidaan yksi muuttuja eliminoida:

> g:=simplify(f(x,y,V/(x*y)));

g := a*(3*x^2*y^2+2*V*x+2*V*y)/(x*y)

Tässä on siis minimoitava funktio (lauseke) joukossa x >0, y>0.

> dg1:=simplify(diff(g,x));

dg1 := a*(3*x^2*y-2*V)/(x^2)

> dg2:=simplify(diff(g,y));

dg2 := a*(3*x*y^2-2*V)/(y^2)

Käsin laskemalla saadaan vaivattomasti :

> xmin:=((2*V)/3)^(1/3); ymin:=xmin;

xmin := 1/3*2^(1/3)*3^(2/3)*V^(1/3)

ymin := 1/3*2^(1/3)*3^(2/3)*V^(1/3)

> zmin:=V/(xmin*ymin);

zmin := 1/2*2^(1/3)*3^(2/3)*V^(1/3)

> minarvo:=f(xmin,ymin,zmin);

minarvo := 3*2^(2/3)*3^(1/3)*V^(2/3)*a

> g:=expand(g);

g := 3*x*y*a+2*a*V/y+2*a*V/x

Olkoon vaikkapa a=1 ja V=5. (Periaatteessa tilanne on aivan sam. olivatpa arvot mitä tahansa (positiivisia).)

> a:=1: V:=5: g;

3*x*y+10/y+10/x

> minarvo;evalf(%);

3*2^(2/3)*3^(1/3)*5^(2/3)

20.08298850

>

> display(plot([20/(3*x),0.5],x=0.5..12,color=red),plot([[0.5,12],[0.5,0.5],[0.5,3/0.5]],x=0.5..6),plot([[xmin,ymin]],style=point,symbol=cross,symbolsize=20,color=black),view=[0..12,0..12]);

[Maple Plot]

Tässä suljetussa ja rajoitetussa joukossa jatkuva funktio g saa miniminsä. Reunalla se ei sitä saa, koska kaikissa reunapisteissä funktion arvo on suuremp kuin "ristipisteessä", joka on KRP ja niin ollen ainoa mahdollinen minimipiste

ja näinollen minimipiste.

Punaisen alueen ulkopuolella g on kaikkialla vieläkin suurempi, joten "ristipiste" on globaali minimi koko joukossa

x>0, y>0 (avoimessa 1. koordinaattoneljänneksessä).

>

> solve({dg1=0,dg2=0},{x,y});

{y = RootOf(-10+3*_Z^3), x = RootOf(-10+3*_Z^3)}

> map(allvalues,%);

{y = -1/6*90^(1/3)-1/6*I*sqrt(3)*90^(1/3), y = -1/6...
{y = -1/6*90^(1/3)-1/6*I*sqrt(3)*90^(1/3), y = -1/6...

Luentotehtäviin liittyvää

> F:=1/x+1/y+x*y;plot3d(F,x=1/3..3,y=1/3..3/x,style=patchcontour);

>

F := 1/x+1/y+x*y

[Maple Plot]

> A:=Matrix([[17,6],[6,8]]);

A := _rtable[8193908]

> eigenvectors(A);

eigenvectors(_rtable[8193908])

> display(plot(16/x^2,x=2..4),contourplot(x^2+y^2,x=0..4,y=0..16,contours=[6,7,8,9,10,11,12,13,15],color=blue),scaling=constrained);

[Maple Plot]

>