Harj. 5, to, ratkaisuja
21-25.3.2000
Torstai 23.3.
1.
> with(plots):
a)
> f:=(x,y)->(x+y)/(x-y);
> yla:=plot3d(f(x,y),x=-2..2,y=x+.2..2,axes=BOX,view=[-2..2,-2..2,-10..10],orientation=[-30,50],style=patchcontour):
> ala:=plot3d(f(x,y),x=-2..2,y=-2..x-.2,axes=BOX,view=[-2..2,-2..2,-10..10],orientation=[-30,50],style=patchcontour):
> display([yla,ala]);
b)
> x:='x':y:='y':f:=sqrt(x*y);
> xposypos:=plot3d(f,x=0..10,y=0..10,color=f):xnegyneg:=plot3d(f,x=-10..0,y=-10..0,color=f):display([xposypos,xnegyneg],style=patchcontour);
Näkyy toimivan yhdessäkin osassa, plot3d on älykäs ja osaa jättää kompleksiarvot oman rauhaansa.
> plot3d(f,x=-10..10,y=-10..10,color=f);
c)
> f:=sqrt(abs(x*y));plot3d(f,x=-10..10,y=-10..10,color=f);
Jotkut sanovat tätä Sidneyn oopperataloksi, ehkä pitäis kääntää ylösalaisin, kuka kävis katsomassa?
d)
> f:=(x,y)->x*y/(x^2+y^2);plot3d(f(x,y),x=-5..5,y=-5..5);
e)
> x:='x':y:='y':f:=x*y/(x^2-y^2);plot3d(f,x=-10..10,y=-10..10,view=[-10..10,-10..10,-10..10]);
>
f:=(x,y)->x*y/(x^2-y^2):f(0,0):=0:eps:=0.1:
EW:=plot3d(f(x,y),x=-5..5,y=x+eps..-x-eps):
NSyla:=plot3d(f(x,y),x=-5..5,y=x+eps..5):
NSala:=plot3d(f(x,y),x=-5..5,y=-5..x-eps):
> display([EW,NSyla,NSala],view=[-5..5,-5..5,-10..10]):
Tulos on varsin repaleinen. Laura onnistui kyllä sovittamaan tämän tavan aika hyvin, siinä lienee ollut jonkin verran virittelemistä.
Katsotaan napakoordinaattityyli:
> eps:=0.01:x:=r*cos(phi);y:=r*sin(phi);z:=tan(2*phi)/2;plot(z,phi=-Pi/4+eps..2*Pi-Pi/4-eps,discont=true,view=[-Pi/4+eps..2*Pi-Pi/4-eps,-10..10]);
>
eps:=0.01:k1:=plot3d([x,y,sin(2*phi)/(2*cos(2*phi))],r=0..1,phi=-Pi/4+eps..Pi/4+eps):
k2:=plot3d([x,y,sin(2*phi)/(2*cos(2*phi))],r=0..1,phi=Pi/4+eps..3*Pi/4+eps):
k3:=plot3d([x,y,sin(2*phi)/(2*cos(2*phi))],r=0..1,phi=3*Pi/4+eps..5*Pi/4-eps):
k4:=plot3d([x,y,sin(2*phi)/(2*cos(2*phi))],r=0..1,phi=5*Pi/4+eps..7*Pi/4-eps):display([k1,k2,k3,k4],axes=BOX);
2.
tehtävä 2 a) kartio
> plot3d([r*cos(phi),r*sin(phi),r],r=-5..5,phi=0..2*Pi);
Lieriö
> z:='z':plot3d([2*cos(phi),2*sin(phi),z],phi=0..2*Pi,z=-2..2);
Ellipsoidi on luontevaa esittää pallokoordinaatistossa.
> a:=2:b:=4:c:=1:plot3d([a*sin(phi)*cos(Theta),b*sin(phi)*sin(Theta),c*cos(phi)],phi=0..2*Pi,Theta=0..2*Pi,scaling=constrained);
1-vaippainen hyperboloidi:
> restart:with(plots):x:=r*a*cos(t);y:=r*b*sin(t);f:=c*sqrt(x^2/a^2+y^2/b^2-1);
> a:=1:b:=2:c:=3:yla:=plot3d([x,y,f],r=1..2,t=0..2*Pi):ala:=plot3d([x,y,-f],r=1..2,t=0..2*Pi):display([yla,ala]);
3.
> f:=(x,y)->(x^2-y^2)/(x^2+y^2);f(0,0):=0;plot3d(f(x,y),x=-1..1,y=-1..1);
Kuvasta näkyy selvästi, että osittaisderivaatta x:n suhteen = 0 kaikissa x-akselin pisteissä 0:aa luuunottamatta (funktio x->f(x,0) on vakio =1, kun x erikuin 0.)
Samoin on vastaavasti osittaisderivaatta y:n suhteen = 0 kaikissa y-akselin pisteissä 0:aa luuunottamatta (funktio y->f(0,y) on vakio =-1, kun y erikuin 0.)
Mutta miten on pisteessä (0,0).
> erosx:=(f(h,0)-f(0,0))/h;erosy:=(f(0,h)-f(0,0))/h;
Siis derivaattoja ei ole origossa (erotusosamäärät lähestyvät ääretöntä. (Niinhän näkyy kuvastakin, sekantti nousee pystyyn, kun h->0). Kaikissa muissa x-akselin pisteissä f:llä on vakioarvo 1, joten niissä os.der. x:n suhteen =0. Sama pätee tietysti y-akselin pisteisiin ja siellä os. derivaattaan y:n suhteen. (Siellä f:n arvo = -1.)
Tehtävän lopussa on virhe, tämä ei ole mainitunlainen esimerkki, koska derivaattoja ei ole.
Katsotaan vielä (epä)jatkuvuutta. Riittää huomata, että x-ja y-akseleita pitkin saadaan eri raja-arvot, 1 ja -1. Siitä seuraa, ettei raja-arvoa ole, joten jatkuvuuden edellytykset kaikoavat taivaan tuuliin. Tarkemmin voidaan vielä katsoa napakoordinaateissa:
> x:=r*cos(phi);y:=r*sin(phi);z:=combine(simplify(f(x,y)));
> plot3d([x,y,z],r=0..1,phi=0..2*Pi);
Lopussa mainitunlainen esimerkki olisi vaikkapa funktio
> f:=(x,y)->piecewise(x*y=0,0,1);f(1,0);display([plot3d(f(x,y),x=-1..1,y=-1..1,grid=[8,8]),spacecurve([x,0,0],x=-1..1),spacecurve([0,y,0],y=-1..1)]);
4.
5.
> f:=(x,y)->x*y*(x^2-y^2)/(x^2+y^2);
> f(0,0):=0;
> plot3d(f(x,y),x=-1..1,y=-sqrt(1-x^2)..sqrt(1-x^2),axes=BOX);
> fx:=simplify(diff(f(x,y),x));
> fy:=simplify(diff(f(x,y),y));
> erosx:=(f(x,0)-f(0,0))/x;
> erosy:=(f(0,y)-f(0,0))/y;
> plot3d(fx,x=-1..1,y=-sqrt(1-x^2)..sqrt(1-x^2));
> fxy:=simplify(diff(fx,y));fyx:=simplify(diff(fy,x));
Sekaderivaatat ovat tietenkin samat O:n ulkopuolella.
> plot3d(fxy,x=-0.1..0.1,y=-sqrt(1-x^2)..sqrt(1-x^2),axes=BOX);
Tutkitaan nyt vielä graafisesti ensimmäisten derivaattojen jatkuvuutta O:ssa
> zoom:=(f,x0,y0,w)->plot3d(f(x,y),x=x0-w/2..x0+w/2,y=y0-w/2..y0+w/2,axes=BOX):
> F:=unapply(fx,x,y);zoom(F,0,0,1);zoom(F,0,0,1/2);zoom(F,0,0,1/4);
Näyttää menevän niin, että kun ympäristön sivu (säde) puolittuu, niin z-arvokin puolittuu. Näyttää kovasti
raja-arvolta 0.
> fxnapa:=simplify(subs(x=r*cos(phi),y=r*sin(phi),fx));collect(%,r);
Tämä riittää mainiosti, samalla nähdään, että käyttäytyminen on sellaiata, kuin kuvasta jo näkyi, koska
r on tekijänä.
6 Aaltoyhtälö
Tehdään ensin aaltomuoto, jonka etenmistä on helppo tarkastella. Tämä funktio liittyy liitoskohdissaan x-akseliin äärettömän sileästi. (Samalla se on esimerkki funktioista, jonka Taylorin sarja kehitettynä pisteissä 1 tai -1 on identtisesti 0 (pakko olla, koska sen on toisella puolella yhdyttävä x-akseliin. Koska kyseessä ei kuitenkaan ole 0-funktio, niin Taylorin sarja ei suppene missään pisteessä välillä (-1,1) funktin arvoa kohti.
Tämä ei mitenkään kuulunut tähän, mutta pitipä valistaa!
> f:=exp(-1/(1-x^2));
> plot(f,x=-1..1,y=0..1);
> f:=x->piecewise(x>-1 and x < 1,exp(-1/(1-x^2)),0);
> plot(f(x-4),x=-10..10);
> animate(3*f(x-t),x=-10..10,t=-10..10,frames=21,color=red,numpoints=100);
> a:='a':f:=u(x+a*t)+v(x-a*t);
> fxx:=diff(f,x,x);ftt:=diff(f,t,t);
> ftt:=collect(ftt,a^2);
> ftt-a^2*fxx;
7.
a)
> f:=(x,y)->sqrt(x^2+y^2);
> assume(h,real):erosx:=simplify((f(h,0)-f(0,0))/h);
> plot(erosx,h=-1..1);limit(erosx,h=0,right);limit(erosx,h=0,left);
Siis ei ole osittaisderivaattoja 0:ssa (fy käyttäytyy tietysti samoin).
b)
> x:='x':y:='y':f:=(x,y)->(x+y)*abs(x+y);
> erosx:=simplify((f(h,0)-f(0,0))/h);erosy:=simplify((f(0,h)-f(0,0))/h);
Siis osittaisderivaatat = 0 O:ssa. Entä derivaatat suoralla y=-x?
> erosx:=simplify((f(x+h,x)-f(x,x))/h);
Ei tehdä tätä aivan loppuun saakka, kun ei ole aikaa...