Mat-1.192 Numeric and symbolic computing

Tammikuu 2004/Jan 2004

Maple-perusteita/basics, ...maple/perusteita.mws (.html)

Language will be sometimes English, sometimes Finnish for the time being. Stabilizes, when the course starts according to the participants' nationalities.

Course directory for Maple instructions and codes: www.math.hut.fi/teaching/numsym/04/maple/

Abbreviation:    .../maple/

Varsinainen toiminta alkaa kohdasta 6 , lue kuitenkin ainakin 1 läpi huolella.

Maple 8/9

Luokissa versio 8, Maplesoft on julkistanut version 9, milloin saataneen. Tosin ei liene mitään dramaattista uutta.

1. Työskentelyohjeita, työarkin käsittelyn perusasiat

Muista tallettaa aika ajoin/save your work often (CTR-S) . Maple näyttää luokissa silloin tällöin kaatuvan (ainakin ennen, toivottavasti ei enää).

Talletus on joka tapauksessa syytä tehdä aina ennen jotain potentiaalisesti isoa laskentaa. Muista lyhyt: CTR-S

Tämä työarkki sisältää ohjeita ja ohjeisiin liittyviä tehtäviä, joita voi samantien

ryhtyä kokeilemaan. Voit tehdä muistiinpanoja työarkille ja tallettaa sen itsellesi.

Suositus: Selaa työarkkia jonkin matkaa, totuttele heti helpin käyttöön.

Harjoitustehtävädokumentti:  

Kannattaa aloittaa INSERT-valikon SECTION-valinnalla ja napsauttaa muutama sektio heti kättelyssä arkille.

Huomaa, että työarkin voi tallettaa myös HTML-muotoon. Tosin harjoitusratkaisuja esiteltäessä Maple ws-muoto

on yleensä parempi, mutta myöhempää katselua varten taas htlm-doku on tosi hyvä juttu.

Elämänohje:

Maplen filosifiaa kannattaa opetella senverran, että työskentely käy nautittavaksi.

Goals for this exercise:

Kannattaa harjoitella myös teknisiä asioita, kuten työarkin printtaamista ym.

Katsotaan ensin työarkkiin (worksheet) liittyviä asioita.

Maple as a Math textprocessing system:   Convenenient for student project type of work. Result is not of very high quality.

Recommendation: Use LaTeX for serious work. Maple is a convenient tool for generating LaTeX-formulas.

Also, the export->HTML makes an html-document, which is not too large, and is easy to further edit, if needed.

The formulas and figures are gif-images, Maple has also MathML-support (but I have no experience on it.)

Nätti esimerkki Maplella generoidusta ja jälkeenpäin editoimalla parannellusta html-dokusta on Virrankosken

Maple-opas.

For more details with illustrations see ... maple / gsg.pdf

Työarkin painikkeita ja käsittelyä on selostettu havainnollisin kuvin . ../maple/gsg.pdf: ssä.

Esim. paletit (insert-valikosta), smartplotit, ym. "modernit" käyttömukavuudet selitetään gsg:ssä tarkasti.

2. Viitteitä, työarkkeja, koodeja

Samat linki ovat luentosivulla.

     [HAM] Apiola: Symb ja num. lask Maple-ohjelmalla, Otatieto 588

         Tämä teos ilmeisine puutteineenkin lienee hyödyllinen. Perustuu versioon 5.

         Täydennystä vaatii  erityisesti matriisilaskentaosuus, sillä uusi LinearAlgebra-tyyli tuli vasta versioon 6.

         Kirjastossa useita, jos haluat omaksi, saat minulta alennushintaan (10 e).

       Kurssin Maple-hakemisto :  www.math.hut.fi/teaching/numsym/04/maple/       

         gsg.pdf, lrnguide.pdf, prguide.pdf    (Getting Started, Learning, Programming, Maple 7)

        Näitä on myös laitoskirjastossa manuaalihyllyssä ainakin kahdet kappaleet.

3. Opiskelusuositus

Käy samalla läpi [HAM]-kirjan ss. 13 - 51 (Alkutoimenpiteet)

4. Työarkin (worksheet) lataaminen

     Koko työarkin kaikki komennot saat suoritetuksi Edit valikon valinnalla " execute worksheet ", kuten edellä todettiin.

Jos haluat jatkaa kokeiluja tällä kohdalla, tee lisää kehotteita  joko  klikkaamalla kohtaa >

tai CTR-J   (jos jälkeen)  (CTR-K (ennen))

>    247*3756;

927732

5.  Laskentoa numeroilla

>    restart:

Laskuoperaatiot ovat "normaalit" +-*/^  , kertomerkkiä ei saa jättää pois (kuten Mathematicassa)

Kokeile jotain, voit myös sijoittaa muuttujiin tyyliin:

>    oso:=123; nimi:=-456; luku:=oso/nimi;

oso := 123

nimi := -456

luku := -41/152

Maple vaatii loppumerkin, joko  ;  tai :    Kokeile, jos et jo tiedä.

Lue lisää:

6.  Laskentoa symboleilla ja numeroilla

Pohdiskelua

Lue

  • [SOL] s 15-16 Symbolien hallintaa ja periaatteita
  • [HAM] s. 70 - 71 (korjaus: http://www.math.hut.fi/~apiola/maple/opas/eval.html  )

(see Heck Ch 3 Variables and names p. 65 -..  

The secret behind success of CA : free (unbound) variables  . )

On hyvä totutella laittamaan restart työarkin alkuun (ja muihinkin hengähdyspaikkoihin)

Painele nyt ENTER:iä ja palaa ohjeen mukaan takaisin.

>    restart:                

>    lauseke:=(a+b)^2;       # Muuttujat a ja b ovat "vapaat"        

lauseke := (a+b)^2

>    lauseke:=expand(%);

lauseke := a^2+2*a*b+b^2

>    a:=x^2 :b:=exp(c*z):

>    lauseke;

x^4+2*x^2*exp(c*z)+exp(c*z)^2

>    x:=1:

>    lauseke;

1+2*exp(c*z)+exp(c*z)^2

Tämä on ensimmäinen merkittävä havainto: Kun x muuttuu, niin lauseke  muuttuu, koska yllä olevassa sijoituslauseessa muuttujat a ja b olivat vapaat.

>   

Warning, premature end of input

Jos haluat vapauttaa vain joitakin valittuja muuttujia, niin:

Muuttujien vapauttaminen arvostaan:

Joko a:='a';  tai  unassign('a'):

>    a:='a':  # Vapautetaan a

>    lauseke;

a^2+2*a*exp(c*z)+exp(c*z)^2

>    b:='b': lauseke;

a^2+2*a*b+b^2

Tässä on ensimmäinen ja tärkeä syy symbolilaskennan onnistumiselle.

Vakiot Pi ja I

>    Pi,I;

Pi, I

>    evalf(Pi);

3.141592654

>    evalf(Pi,30);

3.14159265358979323846264338328

>    2/3+4/5;evalf(%);

22/15

1.466666667

>    evalf(pi);

pi

Huomaa tämä : Maple osaa vain "tekstinkäsitellä"   pi :tä, laskentaan tarvitaan Pi

Tässä tulee usein virheitä alkavalle Maple-urheilijalle.

Kompleksilukuja, imag. yksikkö I

Kompleksisievennys , erityisesti   evalc

>   

Warning, premature end of input

>    (1+2*I)/(2-3*I); # Numeerinen kompleksiluku muuntuu automaattisesti muotoon x+I*y .

-4/13+7/13*I

Jos kompleksiluku annetaan symbolisessa muodossa, Maple olettaa a :n ja b :n reaalisiksi esityksessä a+I*b  .

Error, missing operator or `;`

>    z1:=a1+I*a2;z2:=a2+I*b2;

z1 := a1+a2*I

z2 := a2+b2*I

>    z1/z2;

(a1+a2*I)/(a2+b2*I)

Komento   evalc  on varsin tehokas, kannattaa muistaa kompleksisievennyksissä.

>   

Warning, premature end of input

>    evalc(%);

a1*a2/(a2^2+b2^2)+a2*b2/(a2^2+b2^2)+(a2^2/(a2^2+b2^2)-a1*b2/(a2^2+b2^2))*I

.

>    abs  ja argument:

Error, missing operator or `;`

>    z:=((1+2*I)/(3-4*I));

z := -1/5+2/5*I

>    r:=abs(z);

r := 1/5*5^(1/2)

>    phi:=argument(z);

phi := -arctan(2)+Pi

>    r*exp(I*phi);evalc(%);

1/5*5^(1/2)*exp((-arctan(2)+Pi)*I)

-1/5+2/5*I

  evalc  did a good job again.

Example: complex roots

>    restart:

>    w:=exp(I*2*k*Pi/n);

w := exp(2*I*k*Pi/n)

>    with(plots): # load the plots-package

Warning, the name changecoords has been redefined

>    setoptions(scaling=constrained,axes=framed): # Sama skaala akseleilla

>    n:=5: ykkosen5juuret:=seq(w,k=0..n-1);

ykkosen5juuret := 1, exp(2/5*I*Pi), exp(4/5*I*Pi), exp(-4/5*I*Pi), exp(-2/5*I*Pi)

>    rinkulat:=complexplot([ykkosen5juuret],style=point,symbol=circle,symbolsize=15):

>    yksikkoymp:=complexplot(exp(I*Pi*t),t=0..2*Pi,color=blue):

Grafiikat saadaan samaan kuvaan funktiolla display  (joka asustaa plots -pakkauksessa), kts alempana.

>    display(rinkulat,yksikkoymp);

[Maple Plot]

Huom: complexplot  tuli vasta versiossa 7, siksi [HAM]:ssa esitettävät pikku konversiotemput eivät ole enää tarpeen kompleksipiirron yhteydessä.

>   

Warning, premature end of input

Vrt: Matlab:

>> n=5;

>> K=0:n-1;
>> w=exp(2*K*i*pi/n);
>> plot(w,'or')
>> hold on
>> t=linspace(0,2*pi); plot(exp(i*t),'b')
>> axis equal

7.  Komentojen "hidastusmuodot" alkavat isolla kirjaimella.

(Itse luettavaksi.)

Usein on hyvä estää lopullinen evaluointi ainakin aluksi. Joillakin funktioilla on iso-kirjainalkuinen "inert form".

Yleensä etuhipsukoita ' ' voi myös käyttää evaluoinnin estoon.

>    Int(x*sin(x),x);   # hidastusmuoto (inert form), alkaa isolla I:llä

Int(x*sin(x),x)

>    int(x*sin(x),x);

sin(x)-x*cos(x)

>    Int(x*sin(x),x);

Int(x*sin(x),x)

>    value(%);

sin(x)-x*cos(x)

Aika kätevä tyyli (ala Heck): (Näet heti, ymmärsikö Maple sinut oikein.)

>    Int(x*sin(x),x); value(%);

Int(x*sin(x),x)

sin(x)-x*cos(x)

Hidastusmuoto estää evaluoinnin , se tarjoaa kätevän tavan kirjoittaa matemaattisia kaavoja käyttämällä Maplen yhtälörakennetta.

>    Int(x*sin(x),x)=int(x*sin(x),x);

Int(x*sin(x),x) = sin(x)-x*cos(x)

>    Int(x*sin(x),x): %=value(%);  # Kirjoitustyötä säästävä (Heck-)tyyli.

Int(x*sin(x),x) = sin(x)-x*cos(x)

Evaluointi voidaan estää myös 'hipsukoilla' , vrt [SOL] s. 9 rivi 1 ja s. 15. Tähänpä tuo edellä ollut muuttujan vapauttaminen arvostaankin perustuu.

>    'int(x*sin(x),x)'=int(x*sin(x),x);
'diff(x*sin(x),x)'=diff(x*sin(x),x);

int(x*sin(x),x) = sin(x)-x*cos(x)

diff(x*sin(x),x) = sin(x)+x*cos(x)

Otetaan vielä  sin:n ja cos:n yhteenlaskukaavat (vaikkeivät liitykään hidastusmuotoon, mutta kylläkin tuohon yo. tyyliin. )

>    sin(alpha+beta): %=expand(%);
cos(alpha+beta): %=expand(%);

sin(alpha+beta) = sin(alpha)*cos(beta)+cos(alpha)*sin(beta)

cos(alpha+beta) = cos(alpha)*cos(beta)-sin(alpha)*sin(beta)

8. Defining Variables and Functions

    Israel: Advisor database  ..maple/advisor/fundef.mws

Pohdiskelua

Matemaattisen funktion käsittely Maple-lausekkeena

>    f := x^2;

f := x^2

Määrittelemme muuttujan f, jota käytämme matemaattisen funktion tavoin. Maplen kannalta f on muuttuja , jonka arvoksi olemme sijoittaneet lausekkeen x^2  .

Jos haluamme laskea lausekkeen arvon eri x:n arvoilla, joudumme käyttämään subs-komentoa.

>   

Warning, premature end of input

>    subs(x=5,f);

25

>    eval(f,x=5); # Näinkin voidaan, tätä tapaa käytetty gsg:ssä.   

25

Jos haluat seurata lauseke/funktio-juonta, hyppää tässä kohdassa seq -kometojen yli.

>   

Warning, premature end of input

>    seq(subs(x=k, f),k=0..10);

0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

>    a:=-4: b:=4: N:=10: h:=(b-a)/N: arvojono:=seq(subs(x=a+k*h, f),k=0..N);

arvojono := 16, 256/25, 144/25, 64/25, 16/25, 0, 16/25, 64/25, 144/25, 256/25, 16

>    evalf(arvojono);

16., 10.24000000, 5.760000000, 2.560000000, .6400000000, 0., .6400000000, 2.560000000, 5.760000000, 10.24000000, 16.
16., 10.24000000, 5.760000000, 2.560000000, .6400000000, 0., .6400000000, 2.560000000, 5.760000000, 10.24000000, 16.


VAROITUS: Kun matemaattista funktiota käsitellään lausekkeena, on oltava johdonmukainen. Siitä ei saa välillä käyttää merkintää f(x), tietenkään!

  Kokeile vaikka:

>    f(x); f(5);

x(x)^2

x(5)^2


Matemaattisen funktion käsittely
Maple-funktiona:

>    f := x -> x^2;

f := proc (x) options operator, arrow; x^2 end proc

>    f(x),f(y),f(5);

x^2, y^2, 25

unapply  on toinen funktion määrittelytapa.

>    g := x^3;

g := x^3

>    g(5); # Tämä on tuhoon tuomittu.

x(5)^3

Huomaamme nyt, että olis ollut mukavampi  käsitellä funktiona. No sehän käy:

>    g := unapply(g, x);

g := proc (x) options operator, arrow; x^3 end proc

>    g(5);

125

What is the difference unapply vs  ->   ?

  •  Nuolimäärittely evaluoi  (vasta) suoritusaikana.
  •  unapply evaluoi (jo) määrittelyaikana.

>    a:=x^2: f:=x->a;g:=unapply(a,x);

f := proc (x) options operator, arrow; a end proc

g := proc (x) options operator, arrow; x^2 end proc

>    f(3);

x^2

>    g(3);

9

>    a:=Pi;

a := Pi

>    f(3);

Pi

>    g(3);

9

Tässä tilanteessa siis nuolimääritys   ->  toimi "omituisesti", kun taas unapply  toimi "odotetusti".

Siniset määritysrivit yllä kertovat kyllä asian hyvin, niitä kannattaa seurailla.

Error, `->` unexpected

Jatketaan tästä (harj0):

Varoitus: Hengenvaarallista:  Älä koskaan määrittele funktiota tyyliin F(x):=lauseke;

Tällöin tulee määritellyksi funktion F arvo yhdessä pisteessä x, muilla symboleilla funktio f on määrittelemätön.

Poikkeus : Funktion määrittelyä täydentävien poikkeusarvojen  määrittelyssä tämä on hyödyllistä, esimerkki otetaan kohta.)

Palataan nyt vielä tuohon hengenvaaraan:

>    restart:

>    F(x):=x^3; # kokeillaan kiellettyä leikkiä.

F(x) := x^3

Tuo on syntaksiltaan oikein, mutta hyvin hämäävää.

Mitä on F(x)

>    F(x);

x^3

Näyttää, kuin toimisi oikein. Vaan eipas toimi muilla kuin x:llä.

>    F(x),F(3),F(a),F(sin(z));

x^3, F(3), F(a), F(sin(z))

Toisin sanoen funktio on määritelty vain, kun argumenttina on symboli x  .

>   

Warning, premature end of input

Esimerkki: Funktion määrittelyn täydentäminen poikkeusarvoilla .

Haluamme määritellä funktion, jota joskus kutsutaan nimellä sinc,   olkoon tässä vain F

>    F:=x->sin(x)/x;

F := proc (x) options operator, arrow; sin(x)/x end proc

>    F(0);

Error, (in F) numeric exception: division by zero

Yleinen sääntö ei määrittele F-funktiota 0:ssa, koska siinä tulee 0:lla jako.

Annamme siksi funktiolle 0:ssa sopivan arvon suoralla asetuksella:

>    F(0):=1;

F(0) := 1

>    F(a),F(1/2),F(0),F(sin(x));

sin(a)/a, 2*sin(1/2), 1, sin(sin(x))/sin(x)

>    seq(F(x),x=-2..2);evalf(%);

1/2*sin(2), sin(1), 1, sin(1), 1/2*sin(2)

.4546487134, .8414709848, 1., .8414709848, .4546487134

Remember: evalf  means: eval uate f loating point.

>   

Warning, premature end of input

  • Lue lisää:
  •  [HAM] ss. 62-63

Jatketaan aihetta: Newtonin menetelmän valossa .

(Voi olla hyvä lukea ensin derivaatoista, vaikka Virrankosken oppaasta tai HAM:sta, ehkä kannattaa tehdä ensin alla oleva pikku tehtävä.)

Olkoonpa ratkaistavana yhtälö x = 1+sin(2*x)  .

Määritellään funktio:

>   

Warning, premature end of input

>    restart:

>    f:=x->1+sin(2*x)-x;

f := proc (x) options operator, arrow; 1+sin(2*x)-x end proc

>    N1:=x->x-f(x)/diff(f(x),x);

N1 := proc (x) options operator, arrow; x-f(x)/diff(f(x),x) end proc

>    N1(x);

x-(1+sin(2*x)-x)/(2*cos(2*x)-1)

Ihan hyvä, mutta tässä tyylissä tehdään paljon työtä, jokaisella kutsulla muodostetaan ensin f-funktion symbolinen

derivaatta. Huomattavasti ekonomisempaa on tehdä symboliset operaatiot vain kerran, määrittelyaikana:

>    N:=evalf@unapply(x-f(x)/diff(f(x),x),x);

N := `@`(evalf,proc (x) options operator, arrow; x-(1+sin(2*x)-x)/(2*cos(2*x)-1) end proc)

>    N(t);

t-1.*(1.+sin(2.*t)-1.*t)/(2.*cos(2.*t)-1.)

>    x[0]:=2:

>    for j from 1 to 5 do
x[j]:=N(x[j-1]):
end do:

>    seq(eval(x[j]),j=0..5);

2, 1.238585269, 1.385414630, 1.377353614, 1.377336877, 1.377336877

Jos haluaisimme määritellä yleisen "kirjastofunktion" Newt ,  voisimme tehdä funktion, joka ottaa syötteeksi funktion f ja palauttaa tulokseksi iterointifunktion Newt:

>    restart:

>    Newt:=f->evalf@unapply(x-f(x)/diff(f(x),x),x);

Newt := proc (f) options operator, arrow; `@`(evalf,unapply(x-f(x)/diff(f(x),x),x)) end proc

>    Newt(f);

`@`(evalf,proc (x) options operator, arrow; x-f(x)/diff(f(x),x) end proc)

Esim . sqrt(2) , eli funktion x^2-2  nollakohta.

>    f:=x->x^2-2;

f := proc (x) options operator, arrow; x^2-2 end proc

>    F:=Newt(f);

F := `@`(evalf,proc (x) options operator, arrow; x-1/2*(x^2-2)/x end proc)

Voimme iteroida ilman for-do-rakennetta @@-operaattorilla:

>    (F@@5)(10);

1.414525655

Iterointioperaattori @@ (kts. [HAM] s. 64)

>    (F@F@F@F@F)(10.);   # Sama asia pitemmin.

1.414525655

Lue iterointia koskevia varoituksen sanoja s. 66 [HAM].

Harjoitustehtävä

Määrittele polynomifunktio p(x) = x^3-4*x^2+4*x-1  .

 Määritä nollakohdat ja paikalliset minimit sekä maksimit. Piirrä funktio ja sen derivaatta.

 Tarkista laskemalla funktion arvot, että nollakohdat ovat nollakohtia.

Käsittele polynomia ensin lausekkeena ja sitten funktiona. Mitkä ovat kunkin tavan hyvät/huonot puolet.

Derivaattalauseke --  diff  

Derivaattafunktio  -- D     (Käyttele helppiä  )

 ?plot, ?solve,?fsolve ?diff, ?D

Tämäntyyppisten tehtävien, niin yksinkertaisia matemaattisesti kuin ovatkin, sujuva hallinta tekee Maple-työskentelystä nautittavaa puuhaa ja auttaa pitkälle.

9. Sievennystä ja yhtälön ratkaisua

Pohdiskelua
   simplify  - yleissieventäjä, ensimmäiseksi tarjoiltava.

    expand  -  kertoo auki

    collect   - kokoaa   

           ? collect  ja  kokeile joitakin esimerkkejä. Varsin hyvä komento monessa paikassa.

   factor  -  Jakaa tekijöihin.
   
convert  - ... Monenmoisiin konversioihin sievennyksessä esim      convert(lauseke,parfrac,muuttuja);

  Huomaa, että lauseke ei muutu, uusi tulos palautetaan. Jos halutaan päivittää lauseke, on komennetava

              lauseke:=convert(lauseke,parfrac,muuttuja);

   solve  -  ratkaisee yhtäön tai systeemin

    fsolve - ratkaisee numeerisesti

>    (x^3+1)/(x^2-x+1);simplify(%);

(x^3+1)/(x^2-x+1)

x+1

>    expand((x^2-4)*(x+1)*(x-2)*(x^2+x+1));

x^6-6*x^4-3*x^3+6*x^2+12*x+8

>    factor(%);

(x+2)*(x+1)*(x^2+x+1)*(x-2)^2

Yhtälöistä

  • [SOL] s. 11-12
  • [HAM] s. Luku 6 s. 133 - 142

>    yhtalot:={2*x-5*y=12, 12*x+4*y=17};  # Kyseessä on joukko

yhtalot := {2*x-5*y = 12, 12*x+4*y = 17}

>    ratk:= solve(yhtalot, {x,y});

ratk := {y = -55/34, x = 133/68}

Maple ei sijoita ratkaisuja muuttujille arvoiksi, vaan palauttaa sijoitussäännöt. Ne voidaan antaa suoraan

>    subs -komennolle. Mieti seuraavan komentojonon logiikkaa!

>   

Warning, premature end of input

>    subs(ratk,x),subs(ratk,y);

133/68, -55/34

>    X:=subs(ratk,x); Y:=subs(ratk,y);

X := 133/68

Y := -55/34

Tarkistaminen käy vaivattomasti:

>    subs(ratk,yhtalot);

>   

{12 = 12, 17 = 17}

Voidaan myös käyttää lhs  (left hand side) ja rhs  (right hand side)-tapaa, mutta se on hiukan vähemmän elegantti ja myös altis Maplen harrastamalle järjestyksen vaihtumiselle ratkaisujoukossa. Niinpä tätä tyyliä ei voida ajaa automaattisesti, vaan tuloksiin on puututtava interaktiivisesti, mikä voi olla kiusallista, jos on "vakavahenkisestä" dokumentista kyse. Joka tapauksessa tämäkin tyyli kannattaa omaksua.

Error, missing operator or `;`

>    rhs(ratk[1]);lhs(ratk[1]);

-55/34

y

>    lhs(ratk[2])=rhs(ratk[2]);

x = 133/68

Ratkaisun sijoittaminen muuttujan arvoksi

Tässä nyt on toisin sanoin selitetty samaa, pyyhi omasta dokustasi pois tai järjestä paremmin.

Tietysti näin:

>    X:=rhs(ratk[1]);Y:=rhs(ratk[2]);

X := -55/34

Y := 133/68

Turvallisempi ja elegantimpi tapa (jota edellä mainostettiin):

      Suorita ratk-yhtälöiden ilmaisemat korvaamiset lausekkeessa (pelkkä) x ja
     suorita ratk-yhtälöiden ilmaisemat korvaamiset lausekkeessa (pelkkä) y .

Edellisessä y-yhtälö jää vaille käyttöä (kun pelkkä x ei sisällä y:tä) ja jälkimmäisella vastaavasta syystä x-yhtälö. ratk -joukon järjestys ei näyttele mitään osaa.

>   

Warning, premature end of input

>    X:=subs(ratk,x);Y:=subs(ratk,y);

X := 133/68

Y := -55/34

Tehokkain, mutta turvattomin tapa, joskus kylläkin tosi kätevä:   assign(ratk);

>    assign(ratk);

>    x;y;yhtalot;

133/68

-55/34

{12 = 12, 17 = 17}

>    solve(yhtalot,{x,y}); # assign-komennon jälkeen x ja y eivät ole #vapaita muuttujia, josta syystä solve menee virheeseen.

assign(ratk);  toimii ikäänkuin ratk-yhtälöissä yhtälömerkki (=) vaihdettaisiin sijoitusmerkkin (:=)

     Yhtälöiden toteutuminen saadaan hyvin kätevästi tarkistetuksi kirjoittamalla vain yhtalot;

      Sensijaan yhtälöiden ratkaisua ei voida toistaa, ennekuin muuttujat x ja y on vapautettu arvoistaan.

>    x:='x':y:='y':solve(yhtalot,{x,y});

{y = -55/34, x = 133/68}

Joukot { }, jonot, listat [ ]

Tässä vähän University of North Carolinan sivulta poimittua tekstiä:

Observe that we have now employed three different kinds of grouping symbols:  "()","{}", and "[]".  They are used for different purposes, and Maple requires that they be used correctly.  The standard parentheses "()" are used with functions as in factor(x^2-1)  and sin(Pi) .  The braces " {} " are used to group a set as in {x,y} .  The square brackets " [] " are used to pick a coordinate from a group as in sol[2] .  We will see other uses for these symbols.
Hakasulut ovat myös listasulut.
Tärkeimmät tietorakenteet:

  • Jono , esim:  
  • > jono:=a,b,c;  
  • Lista,  esim:   > lista:=[a,b,c];   
            > op(lista);    # Listan operandi on sisältönä oleva jono
  • Joukko , esim:   > joukko:={a,b,c};  

                                   > op(joukko);  # Vastaavasti joukon operandi

Huom : Listan järjestys on käyttäjän hallinnassa, joukon ei.
              Joukon hyöty on ainakin se, että Maple osaa poistaa toistot ja joukko-operaatiot toimivat.

map - funktion soveltaminen listan (tai muun rakenteen) jokaiseen alkioon (osaan)

Error, missing operator or `;`

>    lista:=[a,b,c];map(f,lista);

lista := [a, b, c]

[a^2-2, b^2-2, c^2-2]

>    jono:=a,b,c;lista:=[a,b,c];op(lista);joukko:={a,b,c}; op(joukko);

jono := a, b, c

lista := [a, b, c]

a, b, c

joukko := {a, b, c}

a, b, c

>    map(f,jono);f(jono);

a^2-2

a^2-2

Huomaa, että jono ei ole samanlainen "paketti" kuin lista tai joukko. map-esimerkki osoittaa, että voidaksemme soveltaa tällaista operaatiota jonoon, se on ensin ympäröitävä listasuluilla []  ja lopuksi riisuttava sulut pois tuloksesta op -komennolla:

>    op(map(f,[jono]));

a^2-2, b^2-2, c^2-2

10. Piirtoa

[SOL] ss. 10 - 11

[HAM]  Luku 3 ss. 89 - 100

Tavallinen käyrien piirto

Käyräparven voi sulkea joko joukkosulkuihin { }  tai listasulkuihin [ ]  .
Jälkimmäinen lienee suositeltavaa, koska järjestys on silloin käyttäjän hallinnassa (esim jos  halutaan värit hallitusti, tms).

>    plot([sin(x),cos(x)],x=0..4*Pi);

[Maple Plot]

  • Ota hiiren vasemmalla kiinni kuvasta, saat kehyksen ja uudet valikot.

     Valitse sama mittakaava akseleilla  (1:1)

  • Jos grafiikka alkaa hidastaa työarkin selausta, kannattaa valita EDIT-valikon alimmasta,
    Remove output.  Sitä kannattaa käyttää muutenkin silloin  tällöin. Työarkki tiivistyy (ja nopeutuu) kummasti. Outputit saa takaisin  saman EDIT-valikon toiseksi alimmaisesta execute worksheet
  • Huomaa: Pi on Iso P, pieni i . (pi kirjoittuu oikean näköisesti, mutta Maple ei tunnista sitä
    muuksi kuin kreikkalaiseksi kirjaimeksi. )  [No johan tuosta huomauteltiin.]

Parametrimuotoinen piirto

Syntaksi poikkeaa aika vähän, tämä täytyy vain oppia (tai katsoa aina uudelleen helpistä).

Aina ei ole hauskaa joutua valitsemaan hirellä, samaskaalaiisuus (ja monia muita) voidaan antaa plot-komennon tarkentimena.

>    plot([cos(t),sin(t),t=0..2*Pi],scaling=constrained);

[Maple Plot]

Pisteet voidaan yhtä hyvin ajatella kompleksitason pisteinä. complexplot osaa käsitellä suoraan reaalimuuttujan kompleksiarvoista funktiota. Tässä on sekin mukava piirre, että syntaksi on luonnollisempi ja siten helpompi muistaa kuin tuossa parametrimuotoisessa R^2-piirrossa.

>    with(plots):

Warning, the name changecoords has been redefined

>    complexplot(cos(t)+I*sin(t),t=0..2*Pi,scaling=constrained,color=blue);

[Maple Plot]

Edellinen voidaan ilmaista lyhyemmin eksponenttifunktion (Eulerin kaavan) avulla. Piirretään vaihteeksi pelkät pisteet.

>    complexplot(exp(I*t),t=0..2*Pi,scaling=constrained,color=cyan,style=point);

[Maple Plot]

Taulukoidun datan piirto ("listaplotti")

Sometimes we will be interested in functions defined in terms of a discrete
table of values rather than a formula.  For example, consider the following table of
temperatures recorded at various times on a spring day in Raleigh.
     
   Time:  |  6:00 a.m. |  10:00 a.m. |  12:00 p.m. |  4:00 p.m. |  5:00 p.m.
  ----------------------------------------------
   Temp: |   45 deg.  |    57 deg.       |   65 deg.      |   67 deg.    |   66 deg.

                      
Table of Temperatures on a Spring Day in Degrees Fahrenheit    

To plot this data you must first define the points as a list.  Since the time is recorded in a cyclic fashion, we will plot the times in the so-called "military style",  i.e.  6:00 a.m. is 0600 and  6:00 p.m. is 1800.

>    ListOfPoints := [[600,45], [1000,57], [1200,65], [1600,67], [1700,66]];

ListOfPoints := [[600, 45], [1000, 57], [1200, 65], [1600, 67], [1700, 66]]

The plot  command allows you to plot a list of points and to connect them with straight lines (unless you choose another option).  This is illustrated in the next command.  Notice also the option which produces a title on the plot.

>    plot(ListOfPoints, title="Temperatures at Various Times");

[Maple Plot]


While the data can be plotted in this way,  because the data is given for a discrete set of points you may prefer the
style=POINT  option as illustrated in the next command.  Note also the effect of the symbol=CIRCLE  option.

>    plot(ListOfPoints, style=POINT, symbol=CIRCLE,symbolsize=15, title=`Temperatures at Various Times`);

[Maple Plot]

>   

Exercise

1.  Plot the graph of   f(x) = exp(-x)*sin(2*x)   over the interval [ -pi, pi ] .

2.  Make a plot of the points in the following table:

      X:  |    -1     |     0     |     1         |     2          |     3    
     -------------------------------------------
      Y:  |   2.72    |     1     |   0.368   |   0.135   |   0.0498

Make two plots, one with the points connected and the other with only the data points.

Miten saadaan kätevästi koordinaattiparien lista [[x1,y1],[x2,t2],...] ?

Olkoon annettu numeeriset listat (Matlabissa sanoisimme vektorit) X ja Y.  Matlabin plot toimii tyyliin plot(x,y);

Maplessa täytyy muodostaa parien lista vaikkapa tähän tapaan:

>    a:=-Pi:b:=Pi:N:=20:h:=(b-a)/N:x:=seq(evalf(a+i*h),i=0..N);

x := -3.141592654, -2.827433389, -2.513274123, -2.199114858, -1.884955592, -1.570796327, -1.256637062, -.9424777962, -.6283185308, -.3141592654, 0., .3141592654, .6283185308, .9424777962, 1.256637062, ...
x := -3.141592654, -2.827433389, -2.513274123, -2.199114858, -1.884955592, -1.570796327, -1.256637062, -.9424777962, -.6283185308, -.3141592654, 0., .3141592654, .6283185308, .9424777962, 1.256637062, ...
x := -3.141592654, -2.827433389, -2.513274123, -2.199114858, -1.884955592, -1.570796327, -1.256637062, -.9424777962, -.6283185308, -.3141592654, 0., .3141592654, .6283185308, .9424777962, 1.256637062, ...
x := -3.141592654, -2.827433389, -2.513274123, -2.199114858, -1.884955592, -1.570796327, -1.256637062, -.9424777962, -.6283185308, -.3141592654, 0., .3141592654, .6283185308, .9424777962, 1.256637062, ...

Olkoot y-arvot vaikkapa sin-funktion arvoja x-pisteissä. Parijono saataisiin nyt näin:

>    xy:=[seq([x[i],sin(x[i])],i=1..N+1)];

xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...
xy := [[-3.141592654, .4102067615e-9], [-2.827433389, -.3090169936], [-2.513274123, -.5877852522], [-2.199114858, -.8090169941], [-1.884955592, -.9510565163], [-1.570796327, -1.], [-1.256637062, -.9510...

>    plot(xy);plot(xy,style=point,symbol=circle);

[Maple Plot]

[Maple Plot]

Huom:   plots -pakkauksessa on listplot ja pointplot . Maplelle luonteenomaista on, että siinä on joukko redundantteja funktioita. Mielestäni on parempi oppia käyttämään harvempaa ydinfunktiojoukkoa kuin omaksua monenlaisia synonyymejä. Niissä voi toki olla joitakin uusia mahdollisuuksia, mutta esim. näissä ei välttämättä ole (kuka noita kaikkia tuhansia ehtii penkoa).

Taulukointi

Tässä teimme itse asiassa taulukon, joka on havainnollisempi usein matriisina.

>    txy:matrix(xy):linalg[transpose](xy):

Tilan säästämiseksi otetaan vähemmän dataa esimerkkiimme. Jätetäänpä myös evalf pois.

>    a:=-Pi:b:=Pi:N:=8:h:=(b-a)/N:x:=seq(a+i*h,i=0..N);
xy:=[seq([x[i],sin(x[i])],i=1..N+1)];
matrix(xy);

x := -Pi, -3/4*Pi, -1/2*Pi, -1/4*Pi, 0, 1/4*Pi, 1/2*Pi, 3/4*Pi, Pi

xy := [[-Pi, 0], [-3/4*Pi, -1/2*2^(1/2)], [-1/2*Pi, -1], [-1/4*Pi, -1/2*2^(1/2)], [0, 0], [1/4*Pi, 1/2*2^(1/2)], [1/2*Pi, 1], [3/4*Pi, 1/2*2^(1/2)], [Pi, 0]]

matrix([[-Pi, 0], [-3/4*Pi, -1/2*2^(1/2)], [-1/2*Pi, -1], [-1/4*Pi, -1/2*2^(1/2)], [0, 0], [1/4*Pi, 1/2*2^(1/2)], [1/2*Pi, 1], [3/4*Pi, 1/2*2^(1/2)], [Pi, 0]])

>    linalg[transpose](xy);

matrix([[-Pi, -3/4*Pi, -1/2*Pi, -1/4*Pi, 0, 1/4*Pi, 1/2*Pi, 3/4*Pi, Pi], [0, -1/2*2^(1/2), -1, -1/2*2^(1/2), 0, 1/2*2^(1/2), 1, 1/2*2^(1/2), 0]])

>    array(xy);  # Taas synonyymi, mutta tiettyjä erojakin yleisyydessa / matriisilaskukyvyissä.

matrix([[-Pi, 0], [-3/4*Pi, -1/2*2^(1/2)], [-1/2*Pi, -1], [-1/4*Pi, -1/2*2^(1/2)], [0, 0], [1/4*Pi, 1/2*2^(1/2)], [1/2*Pi, 1], [3/4*Pi, 1/2*2^(1/2)], [Pi, 0]])

Grafiikoiden yhdistäminen, plots[display] ja textplot

Tässä tarvitaan lisägrafiikkapakkaus plots

>    restart:with(plots):

Warning, the name changecoords has been redefined

Selvitä itsellesi, mitä seuraavassa tehdään. Mieti tarkkaan, miksi jossain pitää antaa plot:lle argumentiksi

f(x) ja miksi taas jossain esim. tang. Voit sitten huvitella vaihtelemalla funktion määritelmää

ja / tai pistettä x0. Kirjoitetaan pieni malliskripti, jonkalaisia voit tehdä moninaisissa yhteyksissä.

>    x0:=1: f:=x->x^3:  # Vaihtuva syöte

>     df:=diff(f(x),x): kk:=subs(x=1,df);

kk := 3

>    x0:=1: tang:=f(x0)+kk*(x-x0);

tang := -2+3*x

>    fkuva:=plot(f(x),x=0..2,color=red): tangkuva:=plot(tang,x=0..2,color=blue): p0kuva:=plot([[x0,f(x0)]],style=point,symbol=circle,symbolsize=15,color=black):

>    display([fkuva,tangkuva,p0kuva]);

[Maple Plot]

>   

>   

Kokeile (mutta vain kerran elämässäsi, silloinkin syvästi katuen, että olit yllytyshullu),

 mitä tapahtuu, kun vaihdat  (:) -> (;)  vaikkapa fkuva:=; . .. yllä. PLOT-tietorakenne paljastuu.

- No, mene edit-valikkoon ja -> remove output,  kyllä se siitä.

Sometimes it will be desirable to print text on a plot.   The plots  procedure textplot  will allow this. The following commands will serve as examples of the textplo t and display  routines.  Make sure you notice where colons and semicolons are used in these commands.

In the next  commands it is important to use colons to punctuate the first two statements.  Otherwise Maple will ouput an entire page of text describing the plot structure rather than the graph.  The textplot in the second command causes the text x=0.6356,y=0.5000 to be printed at the point (.6356,.5000).  The statement align=RIGHT  aligns this text to the right of the point.  

>    f := x -> exp(-x)*sin(3*x);
plot1 := plot(f, 0..3):# tai plot1:=plot(f(x),x=0..3):
plot2 := plots[textplot]([0.6356, 0.5000, "x=.6356, y=.5000"], align=RIGHT):
plots[display]({plot1, plot2});

f := proc (x) options operator, arrow; exp(-x)*sin(3*x) end proc

[Maple Plot]

Huom:

plots-pakkauksen (kuten muidenkin pakkausten) funktioita voidaan käyttää myös lataamatta

koko pakkausta, tällöin pakkauksen nimeä ikäänkuin indeksoidaan ao. funktion nimellä

tyyliin   plots[display]

>   

3d-grafiikkaa, animaatiot

Otetaan lämmönjohtumisesimerkki, jossa valaistaan

  • 3d-pinnan piirtoa
  • Animaatiota
  • 3d-kuvan projektiokäyräparven piirtoa

Tarkastellaan sivuiltaan lämpöeristettyä sauvaa, jonka päät upotetaan hetkellä t=0 jäävesisäiliöihin (0 astetta) ja jonka
alkulämpötilajakauma on

>    f:=x->100*sin(Pi*x/80);

f := proc (x) options operator, arrow; 100*sin(1/80*Pi*x) end proc

Huomaa funktiomääritys .

Olkoon sauvan pituus L=80.

Tässä tapauksessa lämpöyhtälön ratkaisuna olevasta Fourier-sarjasta tulee vain yksi termi. Ratkaisu on (sopivalla lämmönjohtumiskertoimella)

>    u:=(x,t)->100*sin((Pi*x)/80)*exp(-0.001785*t);

u := proc (x, t) options operator, arrow; 100*sin(1/80*Pi*x)*exp(-.1785e-2*t) end proc

Pintapiirros

>    with(plots):

>    plot3d(u(x,t),x=0..80,t=0..400);

[Maple Plot]

  • Klikkaa hiirellä kuvaan (ja tarvittaessa valitse "boxed") työkalunauhasta.
  • Kierrä kuvaa hiirellä.
  • Kokeile  STYLE-valikosta PATCH ja PATCH with contour valintoja.

Animaatio

>    animate(u(x,t),x=0..80,t=0..300,frames=30,color=blue);

[Maple Plot]

Lämpötilaprofiilit  ja korkeuskäyrät

>    plot({seq(u(x,t),t=[0,10,50,100,200,300,400])},x=0..80);

[Maple Plot]

>    contourplot(u(x,t),x=0..80,t=0..400);

[Maple Plot]

>   

Implicitplot

Tämä on periaatteessa sama kuin yhden korkeuskäyrän piirto.

>    implicitplot({x^2+y^2=1,x^3+y^3=1,x^10+y^10=1},x=-2..2,y=-2..2);

[Maple Plot]

>   

>   

Tuohon tekisi mieli laittaa loppuun esim:   ,color=[red,blue,black]);

mutta näköjään kaikki plot :n hyväksymät optiot eivät tässä toimi.