> with(plots): setoptions(scaling=constrained): # Sama skaala akseleilla
w:= (k,n) ->exp(I*2*k*Pi/n);Ei ole, voidaan yhtä hyvin käsitellä lausekkeena:
w:= exp(I*2*k*Pi/n);Edellisessä tapauksessa seq-kutsu on
seq(w(k,n),k=0..n-1);ja jälkimmäisessä
seq(w,k=0..n-1);Missä sitten funktiomääritystä tarvitaan? Jos haluaisimme laskea vaikkapa w(7,11), niin edellisessä se kävisi kirjoittamalla w(7,11); kun taas jälkimmäisessä subs(k=7,n=11,w);
2. Jälkiosaan liittyvä huomio
Tehtäväpaperissa on ehkä hiukan harhaanjohtavasti
juuret:=seq(w(k,n),k=0..n-1);Tehtävää kannattaa lähestyä kirjoittamalla ensin syötteeksi tarkoitettu yleinen kompleksiluku muotoon
z:=r*exp(I*Theta);ja soveltamalla ihan normaalia n:nnen juuren kaavaa.
Toisaalta w(k,n)- lukuja voi mukavasti hyödyntää. Mietipä, miksi nuo juuret saadaan myös näin:
W1wkn ,missä W1 on jokin n:s juuri z:sta.
Maplella ilmaistuna:
seq(W1*w(k,n),k=0..n-1);
No tämä kiteytyi harjoituksen kuluessa, erityisesti sen pienemmän luokan puolella:
Otetaan ensin yleinen kompleksiluvun esitys, pidetään se muuttujana (ei ole tarpeen käsitellä funktiona):
Seuraavat Maple-rivit on otettu soveltamalla työarkkiin
FILE -> EXPORT -> Maple text .
Maple-kehotteella (>) alkavat rivit
ovat syötteitä ja kehotteella alkamattomat vastaavia tuloksia.
> z:=r*exp(I*Theta);Kun tarkastelemme sädeparvea, jossa siis Theta saa valittuja vakioarvoja, niin muodostetaan
> sateet:=seq(z,Theta=[0,Pi/3,2*Pi/3,Pi]); sateet := r, r (1/2 + 1/2 I sqrt(3)), r (- 1/2 + 1/2 I sqrt(3)), -rTässä ovat nämä sädeviivat näkyvillä, z:n itseisrvo r on kullakin säteellä käyräparametrina. Piirto tapahtuu näin:
> grasateet:=complexplot([sateet],r=1..3,axes=framed):Käytännön työskentelyssä piirrämme ensin tyyliin complexplot([sateet],r=1..3,axes=framed); ja sitten, kun olemme kuvaan tyytyväisiä, annamme sille nimen ja muistamme muuttaa lopussa sen (;) een (:) ksi..
Kaariparvi saadaan vaihtamalla vain r:n ja Theta:n roolit. Nyt haluamme vakiosäteisiä viivoja, joissa Theta on muuttujana. Muodostetaan 1-,2- ja 3-säteiset kaarilausekkeet:
> kaaret:=seq(z,r=[1,2,3]); kaaret := exp(I Theta), 2 exp(I Theta), 3 exp(I Theta)ja piirretään ensin erikseen ja sitten yhdessä:
> grakaaret:=complexplot([kaaret],Theta=0..Pi,color=blue): > display([grasateet,grakaaret]);Näin meillä on uskomattoman kaunis z-tason parvi.
Sitten w-taso
Tämä on jo pelkkää huvittelua:
> w:=z^2: > sadekuvat:=seq(w,Theta=[0,Pi/3,2*Pi/3,Pi]); 2 2 2 sadekuvat := r , r (1/2 + 1/2 I sqrt(3)) , 2 2 2 r (- 1/2 + 1/2 I sqrt(3)) , r > grasadekuvat:=complexplot([sadekuvat],r=1..3,axes=framed): > kaarikuvat:=seq(w,r=[1,2,3]); 2 2 2 kaarikuvat := exp(I Theta) , 4 exp(I Theta) , 9 exp(I Theta) > grakaarikuvat:=complexplot([kaarikuvat],Theta=0..Pi,color=blue): > display([grasadekuvat,grakaarikuvat]);
> h:=0.1:rrr:=seq(1+k*h,k=0..10);alue:=seq(z,r=[rrr]); > graalue:=complexplot([alue],Theta=0..Pi/3): > display([grasateet,grakaaret,graalue]);Näiden täyttökaarien kuvat saadaan sitten
> aluekuva:=seq(w,r=[rrr]):
z:=x+I*y;Tehtäisiin aivan samat seq-hommat, nyt x:n ja y:n suhteen.
Jotta ei tule liikaa toistoa, pääsemme vielä helpommalla ja tutustumme uuteen funktioon (oliko riittävästi motivoitu), teemme näin:
conformal(z,z=-1-I..1+I,grid=[20,20]); conformal(z^2,z=-1-I..1+I,grid=[20,20]);conformal on erinomainen väline, jos kyseessä on tällainen xy-hila. (Muuten, conformal(z,...); on kenties helpoin tapa piirtää tuollainen koordinaattihilaviivasto, joka usein on hyödyllinen.) (No, Matlabin grid on kyllä siihen tarkoitukseen vielä helpompi, mutta tämä nyt ei ole Matlab.)
Tässä on näitä 3d-visualisointeja. Selvittele, vaihtele alueita, tulkitse näkemääsi.
> ztaso:=plot3d(0,x=-2..5,y=0..2*Pi,color=argument(z),grid=[21,21]): > katto:=plot3d(10,x=-2..5,y=0..2*Pi,color=argument(z),grid=[21,21]): > absezpinta:=plot3d(abs(exp(z)),x=-2..5,y=0..2*Pi,color=argument(exp(z)), grid=[21,21]): > argezpinta:=plot3d(argument(exp(z)),x=-2..5,y=0..2*Pi,color=abs(exp(z)), grid=[21,21]): > display3d(ztaso); > display3d(absezpinta,axes=box,orientation=[-50,35]); > display3d(argezpinta,axes=box,orientation=[-50,35]);
Jos käsittelemme vaikkapa kompleksilukua R*exp(I*Theta) , jossa jälkeenpäin haluamme muutella R:ää ja Thetaa, voidaan asiaa havainnollistaa tällaisella: Kokeile!
> restart: with(plots): # restart-alkuiselle riville kannattaa silloin # tällöin palata, sitten on ladattava taas # tarvittavat pakkaukset. > z:=R*exp(I*Theta); # Ensin z:ssa esiintyvät symbolit ovat "vapaat" > R:=2: Theta:=Pi/3; # Annetaan niille arvoja > z; # Katsotaan z:n arvo > R:=0.5; Theta:=Pi/10; # Annetaan toiset arvot > z; # Katsotaan taas.Sikäli on selkeämpää ja turvallisempaa määritellä funktioksi:
> z:=(R,Theta)->R*exp(I*Theta);Joskus tämä on kuitenkin kömpelöä, kun joudutaan aina kirjoittamaan argumentit. Aina ei myöskään ole ihan kätevää tehdä jatko-operaatioita, kuten w:=z^2 ; jos z on määritelty funktioksi. Itse asiassa tällaiset kyllä yleensä toimivat, mutta silloin täytyy muistaa ja ymmärtää, että esim tuo w:=z^2 ; määrittelee funktion w , jota käytetään taas muodossa w(R,Theta) .
Symbolilaskentaohjelman käyttäjän tulisi opetella molemmat tavat päästäkseen nautiskelemaan ohjelmalla työskentelystä.
Muista tosiaankin, että kannattaa aina silloin tällöin katsoa muuttujan arvoa yksinkertaisesti kirjoittamalla sen nimi ja puolipiste. (Uusi kehotehan syntyy CTR-J/CTR-K :lla)