Harj. 8 av
18.3.2002 HA
Alustukset
> restart:
Warning, the name changecoords has been redefined
> with(LinearAlgebra):with(linalg):with(plottools): with(plots):setoptions3d(axes=boxed,orientation=[-30,50]):
Warning, the previous binding of the name GramSchmidt has been removed and it now has an assigned value
Warning, the protected names norm and trace have been redefined and unprotected
Warning, the name arrow has been redefined
Warning, the name arrow has been redefined
> V2L:=vek->convert(vek,list):
1.
Tähän on hienosti TeX:itetty ratkaisu pdf-muodossa.
Piirretään vain kuva
> f:=x^2*y*exp(-(x^2+y^2));
> plot3d(f,x=-2..2,y=-2..2);
Kaikki laskemalla saadut johtopäätökset näkyvät tästä oikein hienosti
> contourplot(f,x=-2..2,y=-2..2): #Ääriarvot näkyvät
> contourplot(f,x=-0.2..0.2,y=-0.2..0.2): # Satulapiste näkyy
Harjanteet eivät vielä erotu.
2.
> f:=(x,y)->2*(x^2+y^2)+x*y-5*(x+y);
> fv:=X->2*(X[1]^2+X[2]^2)+X[1]*X[2]-5*(X[1]+X[2]);
> g:=[D[1](f),D[2](f)];
> gv:=v->g(v[1],v[2]);
> #gv(x[0]); g(1,-2);
> x[0]:=<1,-2>;
> #fv(x[0]);
> #f(1,-2);
> u:=-Normalize(Vector(gv(x[0])));
> evalm(x[0]+t*u);
> phi:=t->simplify(fv(evalm(x[0]+t*u)));
> phi(t);
> tmin:=solve(diff(phi(t)=0,t));
> x[1]:=x[0]+tmin*u;
Tähän päättyi 1. askel. Leikitään, että tuo oli käsinlaskua.
3.
Tämä nyt on Maplella laskettu, mutta lienee sovelias käsinlaskun malliksi.
>
f:=(x,y)->x^2+c*y^2;fv:=X->X[1]^2+c*X[2]^2;
g:=[D[1](f),D[2](f)];
gv:=v->g(v[1],v[2]);
>
X0:=evalm(<c,1>);evalm(-gv(X0));
u:=evalm(-gv(X0)/(2*c));
>
phi:=t->simplify(fv(evalm(X0+t*u)));
phi(t);
> collect(phi(t),t^2);
> tmin:=solve(diff(phi(t),t)=0,t);
> X1:=map(normal,evalm(X0+tmin*u));
> (c-1)/(c+1)*<c,1>;
> a*<c,1>;
missä
> a:=(c-1)/(c+1);
Mutkikas ilmaisu johtuu siitä, että Maplen jäljiltä kaava näyttää hieman oudolta (vaikka onkin ihan ok).
4.
> with(plottools): with(plots):
Warning, the name arrow has been redefined
Warning, the name arrow has been redefined
> #?polygon
> display(polygon([[0,0],[12,0],[10,5],[0,8]],color=blue,filled=true),line([-10,0],[8,8]),view=[-4..15,0..15]);
No ei tietenkään!
Perustelu 1 : Jos suora kulkee sisäpisteen kautta, voidaan suoraa siirtää pieni matka sen normaalin suuntaan molempiin suuntiin siten,
että se edelleenkin kulkee sisäpisteen kautta. Toiseen suuntaan siirrettäessä funktion arvo kasvaa ja toiseen pienenee.
Perustelu 2:
> f:=a1*x1+a2*x2; grf:=grad(f,[x1,x2]);
Oletamme tietysti, että f ei ole identtisesti 0. Gradientti on kaikkialla vakiovektori, joka ei ole 0. Siten sisäpisteessä ei ole ääriarvoa.
5.
A-annos B-annos
kaloreita 700 g 500 g
proteiiniä 10 g 35 g
hinta 1.5 eu 2 eu
A-annoksia x1 kpl, B-annoksia x2 kpl.
Kohdefunktio f(x1,x2) = 1.5 x1 + 2 x2
Rajoite-ehdot:
700 x1 + 500 x2 >= 3100
10 x1 + 35 x2 >= 100
> f:=(x1,x2)->1.5*x1+2*x2:
Piirretään rajoite-ehtosuorat punaisella ja kohdefunktion korkeussuoraparvi sinisellä. Minimiarvo kohdefunktiolle saadaan sillä sinisellä suoralla, joka kulkee punaisten suorien leikkauspisteen kautta (Sen alapuolella olevat eivät toteuta molempia rajoite-ehtoja.)
> display(plot(solve(7*x1+5*x2=31,x2),x1=0..10),plot(solve(x1+3.5*x2=10,x2),x1=0..10),seq(plot(solve(1.5*x1+2*x2=c,x2),x1=0..10,color=blue),c=1..10));
> solve({7*x1+5*x2=31,x1+3.5*x2=10},{x1,x2});
> fmin:=f(3,2);
> display(plot(solve(7*x1+5*x2=31,x2),x1=0..10),plot(solve(x1+3.5*x2=10,x2),x1=0..10),plot(solve(1.5*x1+2*x2=fmin,x2),x1=0..10,color=blue));
Piirtämiseen voidaan käyttää myös plots[inequal] - funktiota:
Väritetään käypä alue ("feasible") siniselllä ja sen komplementti vihreällä.
> eyrajoitteet:={7*x1+5*x2>=31,x1+3.5*x2>=10};
>
inequal(eyrajoitteet, x1=-1..10, x2=-1..10, optionsexcluded=(color=green,thickness=4),
optionsfeasible=(color=blue,thickness=4));
6.
> f:=(x,y)->(x-3)^2+y^2;
> phi:=f(x,x^2);
> diff(phi,x)=0;
> solve(%,x);
Tuo reaalijuuri x=1 paistaa aika hyvin yhtälöstä (käsinlaskua ajatellen). Koska kyseessä on 4. asteen ylöspäin aukeava "paraabeli", on KRP:n oltava minimi.
> display(plot(x^2,x=0..3,y=0..4),plot([[3,0],[1,1]],color=blue),plot([[3,0],[1.1,1.1^2]],color=grey),plot([[3,0],[0.9,0.9^2]],color=grey),scaling=constrained);
Sininen minimijana näyttää erehdyttävästi käyrän normaalilta.
Lagrange:
>
f:=(x,y)->(x-3)^2+y^2;
g:=(x,y)->x^2-y;
> L:=f(x,y)+lambda*g(x,y);
> sys:={diff(L,x)=0,diff(L,y)=0,g(x,y)=0};
> solve(sys,{x,y,lambda});
> map(allvalues,{%});
>
Helppo päätellä ilman Mapleakin: muita reaalisia ratkaisuja ei ole.
Geometrisesti on selvää, että ratkaisu on minimi.