44
Symbolinen laskenta, syksy 2013 Ari Lehtonen 1. Johdantoa Maxima on laaja symboliseen laskentaan suunniteltu ohjelma, joka on nykyisin va- paasti saatavissa ja jaettavissa (GNU GPL). Maximalla voidaan sievent¨ a lausekkeita, jakaa polynomeja tekij¨ oihin, ratkaista yht¨ al¨ oit¨ a, derivoida, integroida, kehitt¨ a funk- tioita taylorin sarjoiksi, ratkaista differentiaaliyht¨ al¨ oit¨ a. Vaikka Maximan vahvuusa- lueita on nimenomaan symbolinen laskenta, on siin¨ a paljon numeeriseen laskemiseen liittyvi¨ a toimintoja (laskeminen tarkoilla arvoilla ja likiarvoilla, suurilla kokonaislu- vuilla ja suurtarkkuuslikiarvoilla, jne) sek¨ a varsin monipuoliset piirto-ominaisuudet. Maximassa on lis¨ aksi ohjelmointikieli, jolla Maximan toimintoja voidaan laajentaa. Maxima on siis t¨ aysiverinen matemaattinen yleisohjelmisto ja siin¨ a k¨ aytett¨ aviss¨ a ole- van matematiikan ”tiet¨ amyksen” nojalla sit¨ a voidaan kutsua matemaattiseksi asian- tuntijaj¨ arjestelm¨ aksi (tosin sen k¨ aytt¨ aj¨ ankin pit¨ a olla matematiikan asiantuntija). Maximan k¨ aytt¨ aj¨ a on tavallisesti kosketuksissa (ainakin) kolmen ohjelman kanssa. Varsinainen Maxima-ohjelma j¨ a yleens¨ a taustalle, mutta se on n¨ aist¨ a kolmesta t¨ ar- kein, Maximan komentoja k¨ asittelev¨ a laskentaydin. K¨ aytt¨ aj¨ a n¨ akee l¨ ahinn¨ a jonkin monista aytt¨ oliittymist¨ a, joista n¨ aill¨ a sivuilla k¨ asitell¨ an vain wxMaximaa. Muihin oytyy linkkej¨ a Maximan kotisivulta maxima.sourceforge.net; n¨ aytt¨ okuvia eri k¨ ayt- oliittymist¨ a l¨ oytyy Maximan screenshots.html-sivulta. Kolmas tarpeellinen ohjelma on Gnuplot, joka hoitaa Maximan kuvien tekemisen. Gnuplot-ohjelmaa voi k¨ aytt¨ a suoraankin, mutta aluksi kuvien tekeminen Maximasta k¨ asin lienee helpointa. Esimerkkej¨ a. Moni Maximan komento verhoaa sis¨ ans¨ a melko paljon matema- tiikkaa ja monesti my¨ os mutkikkaita matemaattisia algoritmeja. Vaikka komennoilla primep, next_prime ja prev_prime saadaan n¨ aenn¨ aisen helposti selville onko annettu luku alkuluku (=jaoton kokonaisluku), lukua seuraava ja edelt¨ av¨ a alkuluku, pit¨ av¨ at komennot sis¨ all¨ an paljon lukuteoreettista tietoutta ja mutkikkaita algoritmeja. 2 Komennolla power_mod(a,k,n) saadaan kokonaislukujen a, k ja n potenssin a k ja- koj¨ ann¨ os luvulla n jaettaessa (eli a k modulo n), mutta k¨ aytett¨ av¨ a algoritmi toimii 1 Viimeksi muutettu 30.10.2013. 2 Itse asiassa osa internetin tietoturvasta perustuu juuri alkulukujen mutkikkaaseen k¨ aytt¨ ayty- miseen. Esimerkiksi luvun alkutekij¨ oiden m¨ ar¨ aminen on ”k¨ ayt¨ ann¨ oss¨ a mahdotonta”, mutta luvun selvitt¨ aminen jaolliseksi onnistuu nopeasti. 1

Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

Embed Size (px)

Citation preview

Page 1: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

Symbolinen laskenta, syksy 2013

Ari Lehtonen

1. Johdantoa

Maxima on laaja symboliseen laskentaan suunniteltu ohjelma, joka on nykyisin va-paasti saatavissa ja jaettavissa (GNU GPL). Maximalla voidaan sieventaa lausekkeita,jakaa polynomeja tekijoihin, ratkaista yhtaloita, derivoida, integroida, kehittaa funk-tioita taylorin sarjoiksi, ratkaista differentiaaliyhtaloita. Vaikka Maximan vahvuusa-lueita on nimenomaan symbolinen laskenta, on siina paljon numeeriseen laskemiseenliittyvia toimintoja (laskeminen tarkoilla arvoilla ja likiarvoilla, suurilla kokonaislu-vuilla ja suurtarkkuuslikiarvoilla, jne) seka varsin monipuoliset piirto-ominaisuudet.Maximassa on lisaksi ohjelmointikieli, jolla Maximan toimintoja voidaan laajentaa.Maxima on siis taysiverinen matemaattinen yleisohjelmisto ja siina kaytettavissa ole-van matematiikan ”tietamyksen” nojalla sita voidaan kutsua matemaattiseksi asian-tuntijajarjestelmaksi (tosin sen kayttajankin pitaa olla matematiikan asiantuntija).

Maximan kayttaja on tavallisesti kosketuksissa (ainakin) kolmen ohjelman kanssa.Varsinainen Maxima-ohjelma jaa yleensa taustalle, mutta se on naista kolmesta tar-kein, Maximan komentoja kasitteleva laskentaydin. Kayttaja nakee lahinna jonkinmonista kayttoliittymista, joista nailla sivuilla kasitellaan vain wxMaximaa. Muihinloytyy linkkeja Maximan kotisivulta maxima.sourceforge.net; nayttokuvia eri kayt-toliittymista loytyy Maximan screenshots.html-sivulta. Kolmas tarpeellinen ohjelmaon Gnuplot, joka hoitaa Maximan kuvien tekemisen. Gnuplot-ohjelmaa voi kayttaasuoraankin, mutta aluksi kuvien tekeminen Maximasta kasin lienee helpointa.

Esimerkkeja. Moni Maximan komento verhoaa sisaansa melko paljon matema-tiikkaa ja monesti myos mutkikkaita matemaattisia algoritmeja. Vaikka komennoillaprimep, next_prime ja prev_prime saadaan naennaisen helposti selville onko annettuluku alkuluku (=jaoton kokonaisluku), lukua seuraava ja edeltava alkuluku, pitavatkomennot sisallaan paljon lukuteoreettista tietoutta ja mutkikkaita algoritmeja.2

Komennolla power_mod(a,k,n) saadaan kokonaislukujen a, k ja n potenssin ak ja-kojaannos luvulla n jaettaessa (eli ak modulo n), mutta kaytettava algoritmi toimii

1Viimeksi muutettu 30.10.2013.2Itse asiassa osa internetin tietoturvasta perustuu juuri alkulukujen mutkikkaaseen kayttayty-

miseen. Esimerkiksi luvun alkutekijoiden maaraaminen on ”kaytannossa mahdotonta”, mutta luvunselvittaminen jaolliseksi onnistuu nopeasti.

1

Page 2: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 2

wxMaxima:

käyttöliittymä

Maxima:

laskentaydin

GnuPlot:

piirtoapu

syöte

tulos

Kuva 1.1. Varsinaisen laskemisen hoitaa usein taustalla toimiva Maxi-ma. Kayttaja on kosketuksissa kayttoliittymaohjelmaan, esimerkik-si wxMaximaan, komentojen syottamiseksi ja tulosten esittamiseksi.Maxima kayttaa tarvittaessa muita taustalla toimivia apuohjelmia; esi-merkiksi GnuPlotia grafiikan muodostamiseen.

huomattavan nopeasti verrattuna alkeelliseen tapaan: ak = a · a · · · a (k kpl) tarvit-see k − 1 kertolaskua, mutta power_mod(a,k,n) tarvitsee enintaan 2blog2 kc nelioonkorotusta ja kertolaskua (log2 k on luvun k kaksikantainen logaritmi).

Numeerinen esimerkki valottaa:

(%i1) primep(10^12);

(%o1) false

(%i2) n:next_prime(10^12);

(%o2) 1000000000039

Lasketaan 342! modulo n ”oikein” (42! = 42 · 41 · 40 · · · 3 · 2 · 1):

(%i3) power_mod(3, 42!, n);

(%o3) 723042714543

Luvussa 342! olevien numeroiden lukumaara3

3Tarkemmin: luvun x > 0 numeroiden lukumaara on 1 + blog10 xc. Lattiafunktio r 7→ brc antaaluvun r kokonaisosan eli luku r pyoristetaan kokonaisluvuksi alaspain.

Page 3: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 3

(%i4) 42!*log(3)/log(10), numer;

(%o4) 6.703582817910559 1050

Potenssiin korotuksen 342! laskemiseen tarvittava aika, jos laskettaisiin naivilla tavallaeli 3 · 3 · · · 3 (42! kpl):

(%i5) %/(10^(24)*31556952), numer;

(%o5) 2.124280829755218 1019

Luku 31556952 on vuoden pituus sekunteina; 1024 on kuvitteellinen laskentanopeus,tassa 1024 laskutoimitusta sekunnissa. Y.o. tulos on siis laskenta-aika vuosina!

2. Erikoismerkkeja

Komentokielta kayttavissa ohjelmissa osalle merkeista on varattu erityismerkitys. Alleon poimittu tarkeimmat Maximan katttamat merkit ja niiden kayttotarkoitus:

; puolipiste paattaa komennon$ dollarimerkki paattaa komennon (tulosta ei nayteta)

% prosenttimerkki: edellisen laskun tulos, pilkku toimii erottimena. piste: desimaalipiste; vektoreiden ja matriisien tulot: kaksoispiste: arvon tallettaminen muuttujaan= yhtasuuruusmerkki: yhtalot:= pari kaksoispiste-yhtasuuruusmerkki maarittelee funktion( ) kaarisulut ilmoittavat funktion argumentit;

useita komentoja samalle komentoriville;laskujarjestyksen ryhmittaminen

[ ] hakasulut: listat, vektorit; indeksoidut muuttujat tai -funktiot; indeksi listanalkioon

{ } aaltosulut ilmaisevat joukkoja’ lainausmerkki estaa seuraavan symbolin arvon laskemisen (vrt. differentiaa-

liyhtalot)’ ’ kahdennettu lainausmerkki (ei kaksoislainausmerkki) pakottaa symbolin ar-

von laskemisen” kaksoislainausmerkki: merkkijonot

/* */ /* tama on kommentti */

3. Esimerkkeja

Esimerkki 1. Kuvassa ?? esiintyva funktion kuvaaja y = sinxx

voidaan piirtaa seu-raavalla komennolla:

(%i1) plot2d(sin(x)/x, [x, -2*%pi, 2*%pi]);

plot2d: expression evaluates to non-numeric value somewhere in plotting range.

(%o1)

Page 4: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 4

Varsinainen kuva avautuu erilliseen ikkunaan. Maxima numeroi syotteet muotoon(%i1), (%i2),. . . , ja tulokset vastaavasti (%o1), (%o2),. . . (i←input, o←output).Tassa tilanteessa tulos on tyhja; kuvaa ei tulkita piirtokomennon tulokseksi. Komen-non jalkeinen teksti varoittaa, etta piirrettavan lausekkeen arvoa ei ole maariteltyjossakin pisteessa. Ongelmakohta on x = 0, jossa lauseke saa muodon 0

0.

Huomaa komennon syntaksi eli komennon muoto (sulkujen kaytto yms) ja esimer-kiksi se, etta sinifunktiolle muuttuja x pitaa ilmaista kaarisuluilla (tama sama pateekaikkiin funktioihin). Matematiikan kursseilla ollaan tassa suhteessa levaperaisempia;merkitaan sinx, ja sulkuja kaytetaan vain jos niita tarvitaan ilmaisemaan laskujar-jestysta (sinx+ 1 = 1 + sinx vs. sin(x+ 1)).

Esimerkki 2. Maximalle luku π esitetaan muodossa %pi. Jos Maximalle annetutarvot ovat tarkkoja, Maxima myos laskee tarkoilla arvoilla. Sinin arvo muuttujanarvolla π/4 (=45◦) on

(%i2) sin(%pi/4);

(%o2)1√2

Tarvittaessa laskettavasta lausekeesta voidaan pyytaa numeerista likiarvoa esimerkik-si nain (huomaa jalleen lisamaareen numer=true kayttotapa):

(%i3) sin(%pi/4), numer=true;

(%o3) .7071067811865475

Numeerinen likiarvo voidaan laskea myos funktion float avulla:

(%i4) float(sin(%pi/4));

(%o4) .7071067811865475

Monesti komentoa float kaivataan tarkan arvon muuttamiseen likiarvoksi esimer-kiksi nain (prosenttimerkki funktion float argumenttina viittaa viimeksi suoritetunkomennon tulokseen):

(%i5) sin(%pi/4);

(%o5)1√2

(%i6) float(%);

(%o6) .7071067811865475

Esimerkki 3. Polynomi (tai muunkinlainen lauseke) voidaan jakaa tekijoiksi komen-nolla factor:

(%i7) factor(x^9-1);

(%o7) (x− 1)(x2 + x+ 1

) (x6 + x3 + 1

)Algebran ja lukuteorian kursseilla selvitetaan tarkemmin polynomien jaollisuutta.Edellinen tulos sanoo, etta k.o. polynomin rationaalikertoimiset jaottomat tekijat ovat

Page 5: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 5

tuloksessa nakyvat tekijapolynomit. Jos rationaalilukujen sijasta lasketaan esimerkik-si modulo 3, saadaan

(%i8) factor(x^9-1), modulus=3;

(%o8) (x− 1)9

Esimerkki 4. Nimetaan lauseke 1/(2 + cos x) nimelle y ja integroidaan eli lasketaan∫dx

2 + cos x

(%i9) y:1/(2 + cos(x));

(%o9)1

cos (x) + 2

(%i10) integrate(y,x);

(%o10)2 atan

(sin(x)√

3 (cos(x)+1)

)√

3

Muuttujalle annettu arvo sailyy niin kauan kunnes sita muutetaan tai arvo poiste-taan. Muuttujan arvoja on hyva poistaa vahan valia, ettei vahingossa yrita kayttaamuuttujaa vapaana muuttujana (kuten edella x oli integroimismuuttuja). Arvon pois-taminen tapahtuu komennolla kill:

(%i11) kill(y);

(%o11) done

Esimerkki 5. Lasketaan aareton summa∞∑n=0

rn

Summan∑∞

n=0 rn ”olemus” riippuu luvun r arvosta. Koska luvulle r ei ole annettu

arvoa, Maxima pyytaa kayttajalta summan laskemiseksi tarvittavan tiedon luvun|r| − 1 merkkisyydesta (neg on kayttajan antama vastaus):

(%i12) ev(sum(r^n, n,0,inf), simpsum=true);

Is |r| − 1 positive, negative, or zero? neg;

(%o12)1

1− rMaxima ei sievenna kyseista summaa ilman lisamaaretta simpsum=true.

Jos |r| < 1, summalla on aarellinen arvo 1/(1 − r), muuten summalle ei maaritellaarvoa tai, kuten on tapana sanoa, sarja hajaantuu. Maxima ilmaisee asian nain (nytkayttajan vastaus on pos):

(%i13) ev(sum(r^n, n,0,inf), simpsum=true);

Is |r| − 1 positive, negative, or zero? pos;

sum: sum is divergent. – an error. To debug this try: debugmode(true);

Page 6: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 6

4. Maximan komennoista

Monet Maximan komennoista ovat luonteeltaan funktioita: niille annetaan yksi taiuseampia muuttujia, ja k.o. komento palauttaa arvon, joka voi olla luku, lauseke, vek-tori, matriisi,. . . . Esimerkiksi edella sin(x), power_mod(a, b, n), integrate(y, x),ev(sum(r^n, n,0,inf), simpsum).

Osa komennoista ei palauta varsinaista arvoa; esimerkiksi silmukan

(%i1) for j:1 thru 5 do ( print(j^2) );

1

4

9

16

25

(%o1) done

tulos on aina done. Maxima ei pida print-komennon tulostamia lukua j2 tuloksi-na. Tama nakyy siita, etta naita riveja ei ole numeroitu (eika niihin siis voi viitataMaximan komennoin) ja tulosrivilla (\%o1) on done.

Komentojen ja funktioiden toimintaa voidaan ohjata ns. systeemimuuttujien avulla.Tallaisia ovat edella olleet numer, modulus ja simpsum. Esimerkiksi

sin(%pi/4), numer=true;

factor(x^9-1), modulus=3;

ev(sum(r^n, n,0,inf), simpsum=true);

Systeemimuuttujalle annettu arvo vaikuttaa omalla tavallaan lausekkeiden arvojenlaskentaan. Kun arvo annetaan kuten ylla ”komennon rinnalla”, arvon vaikutus koskeevain k.o. komennon suorittamista. Jos systeemimuuttujan arvoa muutetaan omanakomentonaan, sen vaikutus kohdistuu kaikkiin seuraaviin komentoihin.

Se, kummasta on kyse, funktiosta vai systeemimuuttujasta, kay selville Maximan kasi-kirjan kyseisen komennon syntaksin kuvauksesta. Esimerkiksi komennosta power_mod

Maximan kasikirja sanoo Function ja simpsum on Option variable:

(%i2) ? power_mod;

-- Function: power_mod (<a>, <n>, <m>)

Uses a modular algorithm to compute ‘a^n mod m’...

(%i3) ? simpsum;

-- Option variable: simpsum

Default value: ‘false’

When ‘simpsum’ is ‘true’, the result of a ‘sum’ is simplified.

Page 7: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 7

Tama edella esitetty kahtiajako, funktiot ja systeemimuuttujat, ei kuitenkaan olekaiken kattava. Esimerkkeina olkoot vaikkapa looginen and ja silmukkarakenteissatarpellinen for:

(%i4) ? and;

-- Operator: and

The logical conjunction operator.

(%i5) ? for;

-- Special operator: for

Used in iterations. See ‘do’ for a description of Maxima’s...

4.1. Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk-tioista, jotka ilmaistaan antamalla funktiolle nimi seka sen maarittely- ja maalijoukko,esimerkiksi esimerkiksi f : R→ R, f(x) := sin(x2). Jos funktio esiintyy vain ohimen-nen, funktiota ei valttamatta nimeta, vaan saatettaisiin kayttaa ilmaisua ”funktioR→ R, x 7→ sin(x2)”. On hyva oppia erottamaan toisistaan funktio ja sen maaritte-leva lauseke. Useimmat Maximan komennoista kasittelevat nimenomaan lausekkeita,vaikka joitakin sellaisiakin on, joille pitaa antaa muuttujaksi funktio eli funktion nimi.Komennon muuttuja, joka on nimetty expr, tarkoittaa lauseketta; esimerkiksi

(%i1) ? integrate;

-- Function: integrate (<expr>, <x>, <a>, <b>)

Attempts to symbolically compute the integral of <expr>...

Esimerkkeja komennoista, jotka kaipaavat muuttujakseen funktion, ovat apply ja map:

(%i6) ? map;

-- Function: map (<f>, <expr_1>, ..., <expr_n>)

Returns an expression ...

<f> is either the name of a function of n arguments or is a ‘lambda’...

4.2. Alkeisfunktiot.

(i) Polynomit ja rationaalilausekkeet; peruslaskutoimitukset + - * / ^.(ii) exp, log (=luonnollinen, kantaluku on Neperin luku e; muita ei ole).(iii) Trigonometriset: sin, cos, tan cot, sec, csc.(iv) Arkusfunktiot: asin, acos, atan, acot, asec, acsc.(v) Hyperboliset: sinh, cosh, tanh, coth, sech, csch.(vi) Areafunktiot: asinh, acosh, atanh, acoth, asech, acsch.(vii) Lukuteoreettisia funktioita: abs, ceiling, floor, round, max (lmax listoille),

min (lmin listoille), signum, ! (=factorial; kertoma, joka on maaritelty myosei-kokonaislukumuuttujille), binomial, genfact (yleistetty kertoma; laskeva janouseva potenssi); divide, gcd (=syt), lcm (=pyj), mod, power mod, inv mod,totient, ifactors, divisors, primep, next prime, prev prime.

Page 8: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 8

5. Lausekkeiden sieventaminen

5.1. Rationaalilausekkeet. Muodostetaan viidennen asteen polynomi, jolle ker-toimet arvotaan satunnaisesti:

(%i1) p:product(x-(random(10)-5), j,0,4);

(%o1) x (x+ 1)2 (x+ 3)2

Rationaalilausekkeiden sieventamiseen keskeiset komennot ovat ratsimp, expand jafactor:

(%i2) expand(p);

(%o2) x5 + 8x4 + 22x3 + 24x2 + 9x

(%i3) ratsimp(p);

(%o3) x5 + 8x4 + 22x3 + 24x2 + 9x

(%i4) factor(%);

(%o4) x (x+ 1)2 (x+ 3)2

Polynomien jakoyhtalo eli polynomin q jakaminen toisella polynomilla p:q/p = osamaara + jakojaannos/p, t.s. q = osamaara · p+ jakojaannos. Muodostetaanpolynomi q:

(%i5) q:product(x-(random(10)-5), j,0,5);

(%o5) (x− 4) (x− 3) x2 (x+ 2) (x+ 4)

(%i6) q/p;

(%o6)(x− 4) (x− 3) x (x+ 2) (x+ 4)

(x+ 1)2 (x+ 3)2

(%i7) ratsimp(%);

(%o7)x5 − x4 − 22x3 + 16x2 + 96x

x4 + 8x3 + 22x2 + 24x+ 9

(%i8) osamaara:quotient(q, p);

(%o8) x− 9

(%i9) jakojaannos:remainder(q, p);

(%o9) 28x4 + 190x3 + 303x2 + 81x

Vaihtoehtoisesti divide(q,p) antaa parin [osamaara, jakojaannos]:

(%i10) divide(q, p);

(%o10) [x− 9, 28x4 + 190x3 + 303x2 + 81x]

Tarkistetaan, etta q = osamaara · p+ jakojaannos:

Page 9: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 9

(%i11) q - (osamaara*p+jakojaannos);

(%o11) −(x− 9) x (x+ 1)2 (x+ 3)2−28x4−190x3−303x2+(x− 4) (x− 3) x2 (x+ 2) (x+ 4)−81x

(%i12) expand(%);

(%o12) 0

Murtolausekkeen q/p osoittaja ja nimittaja:

(%i13) num(q/p);

(%o13) (x− 4) (x− 3) x (x+ 2) (x+ 4)

(%i14) denom(q/p);

(%o14) (x+ 1)2 (x+ 3)2

Osamurtokehitelma jakaa rationaalifunktion yksinkertaisempien rationaalifunktioidensummaksi. (Osamurtokehitelmia tarvitaaan mm. rationaalifunktioiden integroinninyhteydessa.)

(%i15) partfrac(q/p, x);

(%o15)45

4 (x+ 3)+

63

2 (x+ 3)2 +67

4 (x+ 1)− 15

(x+ 1)2 + x− 9

(%i16) rat(%);

(%o16)/R/x5 − x4 − 22x3 + 16x2 + 96x

x4 + 8x3 + 22x2 + 24x+ 9

(%i17) factor(%);

(%o17)(x− 4) (x− 3) x (x+ 2) (x+ 4)

(x+ 1)2 (x+ 3)2

Kaytetyt muuttujat ja niiden arvot saadaan selville nain:

(%i18) values;

(%o18) [p, q, osamaara, jakojaannos]

(%i19) ev(values);

(%o19) [x (x+ 1)2 (x+ 3)2, (x− 4) (x− 3) x2 (x+ 2) (x+ 4) , x− 9,28x4 + 190x3 + 303x2 + 81x]

Muuttujien arvot kannattaa yleensa poistaa vahan valia:

(%i20) kill(values);

(%o20) done

Page 10: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 10

5.2. Juurilausekkeet. Nelion neliojuuri ja kuution kuutiojuuri sievenevat au-tomaattisesti:

(%i21) sqrt(a^2);

(%o21) |a|

(%i22) (a^3)^(1/3);

(%o22) a

Tulon neliojuuri ei sievene automaattisesti (tahan on syynsa):

(%i23) ab:sqrt(a*b);

(%o23)√a b

Komento radcan pakottaa sieventamisen:

(%i24) radcan(%);

(%o24)√a√b

Mutta jos tahan tulokseen sijoitetaan a = −1 ja b = −1

(%i25) subst([a=-1, b=-1], %);

(%o25) − 1

. . . niin saadaan eri tulos kuin sijoittamalla lausekeeseen√a b :

(%i26) subst([a=-1, b=-1], ab);

(%o26) 1

Saanto√a b =

√a√b ei siis pade kaikille luvuilla a ja b.

Monimutkaisten lausekkeiden vertaaminen onnistuu usein helpoiten tutkimalla niidenerotusta:

(%i27) lauseke1:(sqrt(r^2 + a^2) + a)*(sqrt(r^2 + b^2) + b)/r^2;

(%o27)

(√r2 + a2 + a

) (√r2 + b2 + b

)r2

(%i28) lauseke2:(sqrt(r^2 + a^2) + sqrt(r^2 + b^2) + a + b)/

(sqrt(r^2 + a^2) + sqrt(r^2 + b^2) - a - b);

(%o28)

√r2 + b2 +

√r2 + a2 + b+ a√

r2 + b2 +√r2 + a2 − b− a

(%i29) ratsimp(lauseke1 - lauseke2);

(%o29) 0

(%i30) kill(values)$

Page 11: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 11

5.3. Trigonometriset lausekkeet. Trigonometristen lausekkeiden sieventami-nen on mutkikkaampaa kuin rationaalisten, koska trigonometrisilla funktioilla on mo-nenlaisia identiteetteja.

(%i31) esim:(sin(x)^4 - 6*cos(x)^2*sin(x)^2

+ 4*(cos(x)^2-sin(x)^2)

+ 8*sin(x) + cos(x)^4 + 3)/(8*cos(x)^3);

(%o31)sin (x)4 − 6 cos (x)2 sin (x)2 + 4

(cos (x)2 − sin (x)2)+ 8 sin (x) + cos (x)4 + 3

8 cos (x)3

(%i32) trigrat(esim);

(%o32)cos (4x) + 4 cos (2x) + 8 sin (x) + 3

2 cos (3 x) + 6 cos (x)

(%i33) trigsimp(esim);

(%o33)sin (x) + cos (x)4

cos (x)3

Maxima tulkitsee hyperboliset funktiot sieventamisen suhteen ”trigonometrisiksi”,koska nilla on paljon vastaavanlaisia indentiteetteja.

(%i34) esim:sech(x)^2*sinh(x)*tanh(x)/coth(x)^2

+ cosh(x)^2*sech(x)^2*tanh(x)/coth(x)^2

+ sech(x)^2*tanh(x)/coth(x)^2;

(%o34)sech (x)2 sinh (x) tanh (x)

coth (x)2 +cosh (x)2 sech (x)2 tanh (x)

coth (x)2 +sech (x)2 tanh (x)

coth (x)2

(%i35) trigsimp(esim);

(%o35)sinh (x)5 + sinh (x)4 + 2 sinh (x)3

cosh (x)5

Ns. kanooninen muoto hyperbolisille funktioille on kuitenkin esitys eksponenttifunk-tion avulla:

(%i36) trigrat(esim);

(%o36)e10x + 2 e9x + 3 e8x − 8 e7x − 14 e6x + 12 e5x + 14 e4x − 8 e3x − 3 e2x + 2 ex − 1

e10x + 5 e8x + 10 e6x + 10 e4x + 5 e2x + 1

Sinin arvo kompleksiselle muuttujan arvolle:

(%i37) esim:sin((3+2*%i)^2);

(%o37) sin((2 i+ 3)2)

pelkka trigexpand ei riita:

(%i38) trigexpand(esim);

(%o38) sin((2 i+ 3)2)

Page 12: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 12

(%i39) expand(esim);

(%o39) sin (12 i+ 5)

(%i40) trigexpand(%);

(%o40) i cos (5) sinh (12) + sin (5) cosh (12)

Kompleksiluvut saadaan yleensa mukavimmin normaaliin muotoonsa a+ b i, missa aja b ovat reaaliset, komennolla rectform:

(%i41) rectform(esim);

(%o41) i cos (5) sinh (12) + sin (5) cosh (12)

(%i42) float(%);

(%o42) 23083.68991339166 i− 78034.76015765528

(%i43) cabs(%);

(%o43) 81377.39571207968

(%i44) kill(values)$

6. Yhtaloiden ja yhtaloryhmien ratkaiseminen

6.1. Polynomiyhtalot. Polynomi on muotoa an xn + an−1 x

n−1 + · · ·+ a1 x+ a0

oleva lauseke, missa aj ovat vakioita ja n ei-negatiivinen kokonaisluku.

(%i1) equ:x^3-3*x^2+4*x-1;

(%o1) x3 − 3x2 + 4x− 1

(%i2) wxplot2d(equ, [x,-3,4]);

(%t2)

(%o2)

Page 13: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 13

(%i3) solve(equ=0, x);

(%o3) [x = −√

3 i2− 1

2

3(√

31

2 332− 1

2

) 13

+

(√31

2 332

− 1

2

) 13(−√

3 i

2− 1

2

)+ 1,

x =

(√31

2 332

− 1

2

) 13(√

3 i

2− 1

2

)−−√

3 i2− 1

2

3(√

31

2 332− 1

2

) 13

+ 1,

x =

(√31

2 332

− 1

2

) 13

− 1

3(√

31

2 332− 1

2

) 13

+ 1]

(%i4) float(%);

(%o4) [x = −1.011780141877317 (.8660254037844386 i− 0.5) +.3294523380492989 (−.8660254037844386 i− 0.5) + 1.0,x = .3294523380492989 (.8660254037844386 i− 0.5)−1.011780141877317 (−.8660254037844386 i− 0.5) + 1.0,x = .3176721961719822]

(%i5) rectform(%);

(%o5) [x = 1.341163901914009 − 1.161541399997251 i, x = 1.161541399997251 i +1.341163901914009, x = .3176721961719822]

Komennon solve sijasta voidaan kayttaa komentoa algsys (katso syntaksi tarkkaan):

(%i6) algsys([equ=0], [x]);

(%o6) [[x = 1.34116390191401 − 1.161541399997252 i], [x = 1.161541399997252 i +1.34116390191401], [x = .3176721836625734]]

(%i7) algsys([equ=0], [x]), algexact=true;

(%o7) [[x =

(√31

2 332

− 1

2

) 13

− 1

3(√

31

2 332− 1

2

) 13

+ 1],

[x =

(√31

2 332

− 1

2

) 13(√

3 i

2− 1

2

)−−√

3 i2− 1

2

3(√

31

2 332− 1

2

) 13

+ 1],

[x = −√

3 i2− 1

2

3(√

31

2 332− 1

2

) 13

+

(√31

2 332

− 1

2

) 13(−√

3 i

2− 1

2

)+ 1]]

Page 14: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 14

6.2. Vaikka polynomiyhtalon juuret ovatkin reaaliset, saattaa ratkaisukaavoistasaada sellaisen kuvan, etta juuret olisivat kompleksiset (juuren lauseke nayttaa si-saltavan imaginaariyksikon %i). Tama on kolmannen asteen yhtaloille ominaista ta-pauksessa, jossa yhtalon diskriminantti on negatiiviinen (ns. casus irreducibilis elisupistumaton tapaus).

(%i8) equ:x^3+3*x^2-1;

(%o8) x3 + 3x2 − 1

(%i9) wxplot2d(equ, [x,-3,1]);

(%t9)

(%o9)

(%i10) solve(equ=0, x);

(%o10) [x =

(√3 i

2− 1

2

) 23

+

(−√

3 i

2− 1

2

) (√3 i

2− 1

2

) 13

−1, x =

(√3 i

2− 1

2

) 43

+

−√

3 i2− 1

2(√3 i2− 1

2

) 13

− 1, x =

(√3 i

2− 1

2

) 13

+1(√

3 i2− 1

2

) 13

− 1]

(%i11) juuret:rectform(%);

(%o11) [x = i

(sin

(4 π

9

)−

sin(

2π9

)2

−√

3 cos(

2π9

)2

)+ cos

(4 π

9

)+

√3 sin

(2π9

)2

cos(

2π9

)2

−1, x = i

(sin

(8 π

9

)+

sin(

2π9

)2

−√

3 cos(

2π9

)2

)+cos

(8 π

9

)−√

3 sin(

2π9

)2

cos(

2π9

)2

− 1, x = 2 cos

(2π

9

)− 1]

(%i12) float(%);

(%o12) [x = −.6527036446661393, x = 1.110223024625157 10−16 i−2.879385241571816,x = 0.532088886237956]

Juuret ovat oikeasti reaaliset; toisen juuren 1.1 · 10−16 i johtuu pyoristysvirheista.

Page 15: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 15

6.3. Joskus juuria nayttaa tulevan liian vahan:

(%i13) equ:x^3-3*x+2;

(%o13) x3 − 3x+ 2

(%i14) wxplot2d(equ, [x,-3,2]);

(%t14)

(%o14)

(%i15) solve(equ=0, x);

(%o15) [x = −2, x = 1]

Tallaisessa tilanteessa kannattaa tarkistaa muuttuja multiplicities; se kertoo kun-kin juuren kertaluvun:

(%i16) multiplicities;

(%o16) [1, 2]

Juuri x = −2 on yksinkertainen ja juuri x = 1 on kaksinkertainen; tama nadaan myostekijoihin jakamalla:

(%i17) factor(equ);

(%o17) (x− 1)2 (x+ 2)

6.4. Yhtalon likimaarainen ratkaisu. Kolmannen asteen polynomeille kay-tettava ratkaisukaava on ns. Cardanon kaava. Vastaava kaava on olemassa neljannenasteen yhtaloille, mutta korkeamman asteen yhtaloille Abel ja Galois osoittivat1800-luvun alussa, etta sellaisia kaavoja ei ole olemassa.

(%i18) equ:x^5+3*x^2-1;

(%o18) x5 + 3x2 − 1

(%i19) wxplot2d(equ, [x,-2,1]);

Page 16: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 16

(%t19)

(%o19)

(%i20) solve(equ=0, x);

(%o20) [0 = x5 + 3x2 − 1]

solve ei yhtaloa pysty ratkaisemaan, mutta juurten likiarvot saadaan selville komen-nolla allroots:

(%i21) allroots(equ=0);

(%o21) [x = .5610700071702817, x = −.5992410279656858, x = −1.348046941291339, x =1.313757975746356 i+.6931089810433713, x = .6931089810433713−1.313757975746356 i]

6.5. Muille kuin polynomiyhtaloille tarvitaan komentoja find_root, newton, mnewtonyms.

(%i22) find_root(equ=0, x, -2,-1);

(%o22) − 1.348046941291339

(%i23) find_root(equ=0, x, -1,0);

(%o23) − .5992410279656858

(%i24) find_root(equ=0, x, 0,1);

(%o24) .5610700071702817

(%i25) load(newton1)$

(%i26) newton(equ, x, -2, 10^(-5));

(%o26) − 1.348046942063404

(%i27) newton(equ, x, -0.5, 10^(-5));

(%o27) − .5992410279840882

(%i28) newton(equ, x, 1, 10^(-5));

(%o28) .5610712639659423

Page 17: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 17

7. Differentiointia

7.1. Muuttujasta x riippuvan lausekkeen y derivaatta y′ = dy/dx saadaan ko-mennolla diff(y,x):

(%i1) diff(x^2*sin(x), x);

(%o1) 2x sin (x) + x2 cos (x)

Derivointimuuttuja on syyta ilmaista (mika on del(x)?):

(%i2) ’diff(x^2*sin(x)) = diff(x^2*sin(x));

(%o2) del(x2 sin (x)

)=(2x sin (x) + x2 cos (x)

)del (x)

7.2. Raja-arvot. Muuttujasta x riippuvan lausekkeen y raja-arvo pisteessa x0

saadaan komennolla limit(y,x,x0):

(%i3) y1:(1-x^2/2-cos(x))/((1-exp(x))*sin(x))^2;

(%o3)−cos (x)− x2

2+ 1

(1− ex)2 sin (x)2

(%i4) limit(y1, x, 0);

(%o4) − 1

24

Paremman kuvan saa tarkastelemalla lausekkeen y1 osoittajan ja nimittajan Taylorinpolynomeja. Funktion n.s Taylorin polynomi pisteessa x0 on

n∑k=0

1

n!f (k)(x0) (x− x0)

k.

(%i5) y1o:num(y1);

(%o5) − cos (x)− x2

2+ 1

(%i6) y1n:denom(y1);

(%o6) (1− ex)2 sin (x)2

(%i7) taylor(y1o, x,0,6);

(%o7)/T/ − x4

24+

x6

720+ ...

(%i8) taylor(y1n, x,0,6);

(%o8)/T/ x4 + x5 +x6

4+ ...

(%i9) taylor(y1, x,0,6);

(%o9)/T/ − 1

24+

x

24− 43x2

1440+

23x3

1440− 467x4

60480+

67x5

20160− 1427x6

1036800+ ...

Page 18: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 18

7.3. Elliptinen integraali. Maximassa on valmiina paljon ns erikoisfunktioita.Katsotaan esimerkkina Jacobin elliptista toisen lajin integraalia.

(%i10) kill(t,s,m)$

(%i11) ’elliptic_e(t,m) = ’integrate( sqrt(1-m*sin(s)^2), s,0,t);

(%o11) elliptic e (t,m) =

∫ t

0

√1−m sin (s)2ds

(%i12) ’elliptic_ec(m) = ’integrate( sqrt(1-m*sin(s)^2), s,0,%pi/2);

(%o12) elliptic ec (m) =

∫ π2

0

√1−m sin (s)2ds

Elliptisen integraalin tarkkaa arvoa ei (poikkeustapauksia lukuunottamatta) pystytaesittamaan alkeisfunktioiden avulla, mutta silla voidaan laskea kuten milla tahansafunktiolla. Tassa derivaatta muuttujan t suhteen ja arvo pisteessa t = 0:

(%i13) diff(elliptic_e(t,m), t);

(%o13)

√1−m sin (t)2

(%i14) elliptic_e(0,m);

(%o14) 0

Taylorin polynomin avulla integraalille saadaan likiarvo:

(%i15) taylor(elliptic_e(t,m), t,0,10);

(%o15)/T/ t− mt3

6− (3m2 − 4m) t5

120− (45m3 − 60m2 + 16m) t7

5040

− (1575m4 − 2520m3 + 1008m2 − 64m) t9

362880+ ...

7.4. Usean muuttujan funktiot. Derivaatta df(x, y)/dx = osittaisderivaattamuuttujan x suhteen; normaali tapa merkita osoittaisderivaattoja on ∂f(x, y)/∂x.

(%i16) diff( f(x,y), x);

(%o16)d

d xf (x, y)

Lausekkeen f(x, y) ns. kokonaisdifferentiaali on ∂f(x,y)∂x

dx+ ∂f(x,y)∂y

dy; koordinaattidif-

ferentiaalien dx ja dy kunnollinen maarittely kaipaisi tovin enemman aikaa (tulevatkurssilla Vektorifunktioiden analyysi 1A):

(%i17) diff( f(x,y) );

(%o17)

(d

d yf (x, y)

)del (y) +

(d

d xf (x, y)

)del (x)

Lasketaan lausekkeelle x2 sin y osittaisderivaatat muuttujien x ja y suhteen:

Page 19: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 19

(%i18) y1:x^2*sin(y);

(%o18) x2 sin (y)

(%i19) [diff(y1, x), diff(y1, y)];

(%o19) [2x sin (y) , x2 cos (y)]

(%i20) kill(values)$

8. Integrointia

8.1. Maaraamaton integraali lausekkeelle

(%i21) y1:x^2*sin(x);

(%o21) x2 sin (x)

(%i22) integrate(y1, x);

(%o22) 2x sin (x) +(2− x2

)cos (x)

. . . ja maaratty integraali

(%i23) integrate(y1, x,0,2*%pi);

(%o23) − 4 π2

8.2. Lasketaan kolminkertainen integraali

(%i24) ’integrate(’integrate(’integrate(

(1+z^(1/3))/sqrt(z),

z,0,y), y,0,x), x,0,1);

(%o24)

∫ 1

0

∫ x

0

∫ y

0

z13 + 1√z

dzdydx

Yksinkertainen lainausmerkki ennen komentoa integrate estaa kyseisen komennonsuorittamisen, joten aluksi voidaan nahda, mita ollaan tekemassa. Integrointimuut-tujista z ja y pitaa kertoa, etta ne ovat positiiviset; tata Maxima ei osaa ”lukea”tiedoista, etta z on valilla [0, y], y on valilla [0, x] ja x on valilla [0, 1]:

(%i25) integrate(integrate(integrate(

(1+z^(1/3))/sqrt(z),

z,0,y), y,0,x), x,0,1);

Is y positive, negative, or zero? pos;

Is x positive, negative, or zero? pos;

(%o25)2144

2805Jos tallaiset kyselyt kyllastyttavat, muuttujia koskevat olettamukset voidaan tehdaetukateen:

Page 20: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 20

(%i26) assume(x>0, y>0);

(%o26) [x > 0, y > 0]

(%i27) integrate(integrate(integrate(

(1+z^(1/3))/sqrt(z),

z,0,y), y,0,x), x,0,1);

(%o27)2144

2805

Muuttujista x ja y tehdyt oletukset on syyta unohtaa, etteivat ne aiheuta ongelmiamyohemmin:

(%i28) forget(x>0, y>0);

(%o28) [x > 0, y > 0]

8.3. Vahan hankalampi integraali:

(%i29) y1:x*sin(a*x)/(x^4 + 4);

(%o29)x sin (a x)

x4 + 4

(%i30) integrate(y1, x);

(%o30) − (((

2 a x4 + 8 a)

sin (a x)2 +(2 a x4 + 8 a

)cos (a x)2)×∫

(3x4 − 4) cos (a x)

(2 a x8 + 16 a x4 + 32 a) sin (a x)2 + (2 a x8 + 16 a x4 + 32 a) cos (a x)2dx

+((

2 a x4 + 8 a)

sin (a x)2 +(2 a x4 + 8 a

)cos (a x)2)×∫

(3x4 − 4) cos (a x)

2 a x8 + 16 a x4 + 32 adx+ x cos (a x) sin (a x)2 + x cos (a x)3 + x cos (a x))

/((2 a x4 + 8 a

)sin (a x)2 +

(2 a x4 + 8 a

)cos (a x)2)

Tulos sisaltaa alkuperaista mutkikkaamman integraalin, joten se on hyodyton. Maa-ratyn integraalin Maxima osaa kuitenkin laskea:

(%i31) integrate(y1, x,minf,inf);

Is a positive, negative, or zero? pos;

(%o31)π e−a sin (a)

2

8.4. Numeerinen integrointi. Lasketaan seuraavan lausekkeen integraali in-tegraalifunktion avulla, tarkka arvo maaratylle integraalille ja numeerinen likiarvolikimaaraismenetelmalla:

(%i32) y1:cos(x)/(5 + 4*cos(x))^2;

(%o32)cos (x)

(4 cos (x) + 5)2

Page 21: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 21

(%i33) i1:integrate(y1, x);

(%o33) 2

5 sin (x)

(cos (x) + 1)(

9 sin(x)2

(cos(x)+1)2+ 81

) − 4 atan(

sin(x)3 (cos(x)+1)

)27

(%i34) ev(i1, x=2*%pi);

(%o34) 0

(%i35) ev(i1, x=0);

(%o35) 0

Koska paatearvot ovat molemmat nollia, pitaisi olla∫ 2π

0y1 dx = 0. Mutta

(%i36) integrate(y1, x,0,2*%pi);

(%o36) − 8π

27

(%i37) float(%);

(%o37) − 0.930842267730309

Missa lienee vika? (Derivoimalla voi tarkistaa, etta maaraamattoman integraalinlauseke on oikein, joten. . . )

Monimutkaisten funktioiden integraaleja ei valttamatta pystyta esittamaan yksinker-taisessa muodossa. Vaihtoehtona voidaan kayttaa numeerista integrointia. Esimer-kiksi komento romberg(lauseke, muuttuja_x, x_alaraja, x_ylaraja) laskee in-tegraalin kayttaen numeerisia menetelmia:

(%i38) romberg(y1, x,0,2*%pi);

(%o38) − .9308421579122568

(%i39) kill(values)$

8.5. Viela eras hankala integraali. (Tama esimerkki kannattaa miettia uudestaan,kun osamurtokehitelman kaytto on tutumpaa integraalien laskemisen apuvalineena).

(%i40) poly:x^5 + x + 1;

(%o40) x5 + x+ 1

(%i41) solve(poly = 0, x);

(%o41) [x =

√3 i2− 1

2

9(√

23

2 332− 25

54

) 13

+

(√23

2 332

− 25

54

) 13(−√

3 i

2− 1

2

)+

1

3,

x =

(√23

2 332

− 25

54

) 13(√

3 i

2− 1

2

)+

−√

3 i2− 1

2

9(√

23

2 332− 25

54

) 13

+1

3,

Page 22: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 22

x =

(√23

2 332

− 25

54

) 13

+1

9(√

23

2 332− 25

54

) 13

+1

3,

x = −√

3 i+ 1

2,

x =

√3 i− 1

2]

(%i42) factor(poly);

(%o42)(x2 + x+ 1

) (x3 − x2 + 1

)(%i43) partfrac(1/poly, x);

(%o43)x2 − 4x+ 5

7 (x3 − x2 + 1)− x− 2

7 (x2 + x+ 1)

(%i44) integrate(1/poly, x);

(%o44)

∫x2−4x+5x3−x2+1

dx

7− log (x2 + x+ 1)

14+

5 atan(

2x+1√3

)7√

3

Integrointi jaa hieman kesken, syysta. Syy nakyy seuraavassa:∑

%r1... tarkoittaa sum-maa lausekkeesta, jossa muuttujan %r1 paikalle sijoitetaan vuoronperaan kaikki yh-talon x3 − x2 + 1 = 0 ratkaisut:

(%i45) integrate(1/poly, x), integrate_use_rootsof:true;

(%o45)

∑%r1inrootsof(x3−x2+1)

(%r12−4%r1+5) log(x−%r1)

3%r12−2%r1

7− log (x2 + x+ 1)

14+

5 atan(

2x+1√3

)7√

3

Vastaava maaratty integraalikaan ei ole jarin houkutteleva:

(%i46) integrate(1/poly, x,0,1);

(%o46) (“3

32√

23 + 11” 1

3(“9261505 2

493 3

252 23

52 + 22009406933777715 2

493

”×

atan

0BB@ 10 343

“9√

23 + 11√

3” 1

3+ 27 2

13√

23 + 11 213 3

32

283 3

23

“9√

23 + 11√

3” 2

3 − 10 356

“9√

23 + 11√

3” 1

3+ 2

13 3

52√

23 + 33 213

1CCA+“−16280485115805 2

493 23

52 − 4899336145 2

493 3

292

”log

0BB@−“9√

23 + 11√

3” 2

3 − 243 3

16

“9√

23 + 11√

3” 1

3 − 5 223 3

13

213 3

76

“9√

23 + 11√

3” 1

3

1CCA+

“16280485115805 2

463 23

52 + 4899336145 2

463 3

292

”log((

“9√

23 + 11√

3” 1

3“2

13 3

83√

23 + 11 213 3

76

”+“9√

23 + 11√

3” 2

3“2√

3√

23 + 24”

+ 223 3

56√

23 + 29 223 3

43 )/(

“9√

23 + 11√

3” 1

3“2

13 3

83√

23 + 11 213 3

76

”))) +“

332√

23 + 11” 2

3(“357951078400 3

252 23

52 + 856112992317141811200

”×

atan

0BB@ 10 343

“9√

23 + 11√

3” 1

3+ 27 2

13√

23 + 11 213 3

32

283 3

23

“9√

23 + 11√

3” 2

3 − 10 356

“9√

23 + 11√

3” 1

3+ 2

13 3

52√

23 + 33 213

1CCA

Page 23: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 23

+“−254742776620056576 23

52 − 239306315988992 3

272

”log

0BB@−“9√

23 + 11√

3” 2

3 − 243 3

16

“9√

23 + 11√

3” 1

3 − 5 223 3

13

213 3

76

“9√

23 + 11√

3” 1

3

1CCA+

“30602041963905024 23

52 + 29181622878208 3

272

”log((

“9√

23 + 11√

3” 1

3“2

13 3

83√

23 + 11 213 3

76

”+“9√

23 + 11√

3” 2

3“2√

3√

23 + 24”

+ 223 3

56√

23 + 29 223 3

43 )/(

“9√

23 + 11√

3” 1

3“2

13 3

83√

23 + 11 213 3

76

”)) +“

−96769346346123264 2352 − 30157178372096 3

292

”log (3)+

“303480995840 3

232 23

52 + 240401415468676055040

”π)+“

−37521035 2503 3

252 23

52 − 88749610719279255 2

503

”×

atan

0BB@ 10 343

“9√

23 + 11√

3” 1

3+ 27 2

13√

23 + 11 213 3

32

283 3

23

“9√

23 + 11√

3” 2

3 − 10 356

“9√

23 + 11√

3” 1

3+ 2

13 3

52√

23 + 33 213

1CCA+“−6215539960035 2

563 23

52 − 11578479565 2

533 3

272

”log

0BB@−“9√

23 + 11√

3” 2

3 − 243 3

16

“9√

23 + 11√

3” 1

3 − 5 223 3

13

213 3

76

“9√

23 + 11√

3” 1

3

1CCA+

“10096329404025 2

473 23

52 + 9352098425 2

473 3

272

”log((

“9√

23 + 11√

3” 1

3“2

13 3

83√

23 + 11 213 3

76

”+“9√

23 + 11√

3” 2

3“2√

3√

23 + 24”

+ 223 3

56√

23 + 29 223 3

43 )/(

“9√

23 + 11√

3” 1

3“2

13 3

83√

23 + 11 213 3

76

”)) +“

−14765830436115 2473 23

52 − 4601620235 2

473 3

292

”log (3)

+“46307525 2

473 3

232 23

52 + 36682344889629525 2

473

”π)

,(14 3

32

„“3

32√

23 + 11” 2

3“88 3

32√

23 + 4968”

+ 55 2113 3

32√

23 + 3105 2113

«×„“

332√

23 + 11” 2

3“88 3

52√

23 + 14904”

+ 55 2113 3

52√

23 + 9315 2113

«×„“

332√

23 + 11” 2

3“88 3

72√

23 + 44712”

+ 55 2113 3

72√

23 + 27945 2113

«×„

−15 223

“3

32√

23 + 11” 2

3+“3

32√

23 + 11” 1

3“3

52√

23 + 33”

+ 75 243

« „“3

32√

23 + 11” 4

3 − 5 223

“3

32√

23 + 11” 2

3+ 25 2

43

«)

(%i47) %, numer;

(%o47) .6538920078155722

Numeerinen likiarvo olisi ollut helpompi maarata:

(%i48) romberg(1/poly, x,0,1);

(%o48) .6538894786510859

9. Summien laskemisesta

(%i1) load(simplify_sum)$

9.1. Lasketaan seuraava summa:

(%i2) sum(n^10, n,1,k);

(%o2)k∑

n=1

n10

Maximaa pitaa useimmiten kovistella enemman summien sieventamiseksi:

Page 24: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 24

(%i3) sum(n^10, n,1,k), simpsum;

(%o3)6 k11 + 33 k10 + 55 k9 − 66 k7 + 66 k5 − 33 k3 + 5 k

66

9.2. Paattymattoman geometrisen sarjan summa:

(%i4) sum(q^n, n,0,m), simpsum;

(%o4)qm+1 − 1

q − 1

(%i5) sum(q^n, n,0,inf), simpsum;

Is |q| − 1 positive, negative, or zero? neg;

(%o5)1

1− q

9.3. Ns. Eulerin summat ovat seuraavaa muotoa, missa m on positiivinen koko-naisluku:

(%i6) es_m:sum(1/n^(2*m), n,1,inf);

(%o6)∞∑n=1

1

n2m

(%i7) simplify_sum(ev(es_m, m=1));

(%o7)π2

6

(%i8) simplify_sum(ev(es_m, m=2));

(%o8)π4

90

(%i9) simplify_sum(ev(es_m, m=3));

(%o9)π6

945

Laskeeko Maxima kyseiset summat oikeasti? Ei toki. Ei aarettoman montaa termiavoi laskea yhteen aarellisessa ajassa. Maxima kayttaa seuraavia kaavoja:

(%i10) zerobern:true$

(%i11) es_m = (-1)^(m-1)*(2*%pi)^(2*m)*bern(2*m)/(2*(2*m)!);

(%o11)∞∑n=1

1

n2m=

(−1)m−1 22m−1 π2m bern (2m)

(2m)!

Page 25: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 25

(%i12) makelist(

(-1)^(m-1)*(2*%pi)^(2*m)*bern(2*m)/(2*(2*m)!),

m,1,10);

(%o12) [π2

6,π4

90,π6

945,π8

9450,π10

93555,

691 π12

638512875,

2 π14

18243225,

3617π16

325641566250,

43867π18

38979295480125,

174611π20

1531329465290625]

9.4. Seuraavan summan laskeminen kasin vaatii hieman kekseliaisyytta:

(%i13) 1+2*sum(r^n*cos(n*x), n,1,inf);

(%o13) 2

(∞∑n=1

rn cos (nx)

)+ 1

(%i14) simplify_sum(%);

Is |r| − 1 positive, negative, or zero? neg;

(%o14) 1− 2 (r cos (x)− r2)

2 r cos (x)− r2 − 1

(%i15) ratsimp(%);

(%o15)r2 − 1

2 r cos (x)− r2 − 1

9.5. Myos seuraavat summat vaativat miettimista:

(%i16) s1:sum(-cos(n*x), n,1,k);

(%o16) −k∑

n=1

cos (nx)

(%i17) s1_simp:simplify_sum(s1);

(%o17)sin (x) sin ((k + 1) x) + (cos (x)− 1) cos ((k + 1) x) + cos (x)− 1

2 cos (x)− 2

(%i18) s2:diff(s1, x);

(%o18)k∑

n=1

n sin (nx)

(%i19) simplify_sum(s2);

(%o19) (((i k + i) sin (x) + (−k − 1) cos (x) + k) sin ((k + 1) x)+ ((k + 1) sin (x) + (i k + i) cos (x)− i k) cos ((k + 1) x)+ (−i k sin (x) + k cos (x)− k − 1) sin (k x)+ (k sin (x) + i k cos (x)− i k − i) cos (k x))/(4 cos (x)− 4)

(%i20) trigrat(%);

(%o20)k sin ((k + 1) x) + (−k − 1) sin (k x)

2 cos (x)− 2

Page 26: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 26

10. Lineaarialgebraa

10.1. Vektorit. Vektorit ilmaistaan Maximalle listoina. Esimerkiksi4

(%i1) v1:[1,2,-1];

(%o1) [1, 2,−1]

(%i2) v2:[%gamma, %e, %pi];

(%o2) [γ, e, π]

(%i3) v1+v2;

(%o3) [γ + 1, e+ 2, π − 1]

(%i4) float(%);

(%o4) [1.577215664901533, 4.718281828459045, 2.141592653589793]

Listat ovat Maximassa kaytossa monessa muussakin paikassa. Aiemmin ne ovat na-kyneet yhtaloiden ja yhtaloryhmien ratkaisujen esittamisessa. Listat ovat varsin kayt-tokelpoisia ”tavaravarastoja”.

Sisatulo ilmaistaan tavallisella pisteella (ei kertomerkilla ∗)

(%i5) v1.v2;

(%o5) − π + γ + 2 e

(%i6) float(%);

(%o6) 2.87218666822983

Vektoreiden ristituloa ei ole valmiina, mutta se on helppo maaritella

(%i7) cross(u,v):=

[ u[2]*v[3] - v[2]*u[3],

-(u[1]*v[3] - v[1]*u[3]),

u[1]*v[2] - v[1]*u[2] ]$

(%i8) cross(v1,v2);

(%o8) [2π + e,−π − γ, e− 2 γ]

10.2. Matriisit. Lineaarikuvaus on euklidisten avaruuksien Rn ja Rm valinenkuvaus L, jolle

L(x+ y) = L(x) + L(y) ja L(λx) = λL(x) kaikille x, y ∈ Rn ja λ ∈ R.

Kokoa m× n oleva matriisi

A =

a1,1 . . . a1,n...

. . ....

am,1 . . . am,n

4Maximaan maaritellyt erityiset vakiot ovat %e = Neperin luku, %pi = π, %phi = kultainen

leikkaus = (1 +√

5)/2, %gamma = Eulerin ja Mascheronin vakio = limn→∞(∑n

k=11k − log n) ≈

.5772156649015329, %i = imaginaariyksikko, inf = ∞ ja minf = −∞.

Page 27: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 27

maarittelee lineaarikuvauksen LA : Rn → Rm, LA(x) := y, missa yj :=∑n

k=1 aj,k xk,t.s. LA(x) = Ax = matriisin A ja sakevektorin x matriisimielessa laskettu tulo. Kunlahto- ja maalipuolella kaytetaan tavanomaista kantaa, missa kantavektorin ej j.skoordinaatti on yksi ja muut nollia, maaraa jokainen lineaarikuvaus L : Rn ja Rm

m×n-matriisin A, jota vastaava lineaarikuvaus LA = L. Kun tyydytaan kayttamaantavanomaisia kantoja, jokainen lineaarikuvaus Rn → Rm on siis muotoa x 7→ Ax.

Maximalle matriisit esitetaan rivivektorien avulla esimerkiksi nain:

(%i9) m1:matrix([1,-2,5],[4,-1,2],[-5,1,0]);

(%o9)

1 −2 54 −1 2−5 1 0

(%i10) matrix_size(m1);

(%o10) [3, 3]

(%i11) m2:matrix([-1,-3,-2],[-2,3,-5],[0,-3,-2]);

(%o11)

−1 −3 −2−2 3 −50 −3 −2

Matriisitulo ilmastaan tavallisella pisteella:

(%i12) m1.m2;

(%o12)

3 −24 −2−2 −21 −73 18 5

Diagonaalimatriisien ja yksikkomatriisien muodostamiseen on omat komennot:

(%i13) diag_matrix(1,2,3);

(%o13)

1 0 00 2 00 0 3

(%i14) ident(3);

(%o14)

1 0 00 1 00 0 1

Lineaarisia yhtaloryhmia voidaan ratkoa komennolla solve kuten muitakin algebral-lisia yhtaloita. Lineaarisen yhtaloryhman kerroinmatriisi saadaan poimituksi komen-nolla coefmatrix:

(%i15) coefmatrix([5*z-2*y+x=0, 2*z-y+4*x=0, y-5*x=0], [x,y,z]);

(%o15)

1 −2 54 −1 2−5 1 0

Page 28: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 28

Kun neliomatriisin determinantti on nollasta eroava, on matriisilla kaanteismatrii-si, joka saadaan komennolla invert tai kahdennetulla potenssiinkorotusmerkilla ^^ :

(%i16) determinant(m1);

(%o16) 13

(%i17) invert(m1);

(%o17)

− 213

513

113

−1013

2513

1813

− 113

913

713

(%i18) m1^^(-1);

(%o18)

− 213

513

113

−1013

2513

1813

− 113

913

713

Transpoosi saadaan komenolle transpose:

(%i19) transpose(m1);

(%o19)

1 4 −5−2 −1 15 2 0

Matriisin liittomatriisi muodostetaan poistamalla matriisista alkiota ai,j vastaavatrivi ja sarake, laskemalla saadun matriisin determinantti, muodostamalla naiden de-terminanttien avulla matriisi, ja lopuksi saadun matriisin transpoosi. Tama onnistuukomennolla adjoint:

(%i20) adjoint(m1);

(%o20)

−2 5 1−10 25 18−1 9 7

(%i21) mt:matrix([a[1,1],a[1,2],a[1,3]],

[a[2,1],a[2,2],a[2,3]], [a[3,1],a[3,2],a[3,3]]);

(%o21)

a1,1 a1,2 a1,3

a2,1 a2,2 a2,3

a3,1 a3,2 a3,3

Liittomatriisin maaraamisessa tarpeelliset alimatriisit saadaan komennolla minor:

(%i22) minor(mt, 1,1);

(%o22)

(a2,2 a2,3

a3,2 a3,3

)Neliomatriisin jalki on sen diagonaalialkioiden summa:

(%i23) mat_trace(mt);

(%o23) a3,3 + a2,2 + a1,1

Matriisin rivi- ja sarakevektorit saadaan komennoilla row ja col:

Page 29: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 29

(%i24) row(mt,1);

(%o24)(a1,1 a1,2 a1,3

)(%i25) col(mt,1);

(%o25)

a1,1

a2,1

a3,1

Lineaarikuvauksen L : Rn → Rm ydin on joukko {x ∈ Rn | L(x) = 0}. Maxi-massa lineaarikuvauksen ytimen maaraamiseksi on komento nullspace, joka maa-raa k.o. ytimelle kannan. Vastaavasti Maxima maaraa kuva-avaruudelle eli joukolleL(Rn) = {L(x) | x ∈ Rn} kannan komennolla columnspace. Kuva-avaruuden L(Rn)dimensiota kutsutaan lineaarikuvauksen asteeksi ja Maximassa se saadaan komennol-la rank (=vastaavan matriisin aste). Komentojen nullspace ja columnspace tulok-sessa esiintyvaa komentoa span ei ole maaritelty mitenkaan. Kun komentojen antamiavektoreita tarvitaan myohempiin laskuihin, ne pitaa poimia komennolla part.

(%i26) m1;

(%o26)

1 −2 54 −1 2−5 1 0

(%i27) rank(m1);

(%o27) 3

(%i28) nullspace(m1);

(%o28) span ()

(%i29) columnspace(m1);

(%o29) span

−2−11

,

14−5

,

520

Koska matriisi m1 on kaantyva, on sen ydin {0}, jonka Maxima ilmaisee sanomalla, et-ta k.o. aliavaruudella ”ei ole kantaa”. Vastaavasti kuva-avaruuden virittajiksi kelpaa-vat matriisin sarakevektorit, ne kun ovat lineaarisesti riippumattomat. Seuraavallamatriisilla tilanne on hieman toisenlainen:

(%i30) m3:matrix([1,2,3], [2,3,4], [3,4,5]);

(%o30)

1 2 32 3 43 4 5

(%i31) rank(m3);

(%o31) 2

Page 30: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 30

(%i32) nullspace(m3);

(%o32) span

−12−1

(%i33) columnspace(m3);

(%o33) span

123

,

234

10.3. Grammin ja Schmidtin ortogonalisointimenetelmalla annetusta lineaarisesti

riippumattomasta vektorijoukosta {v1, . . . , vk} muodostetaan ortogonaalinen vektori-joukko, joka virittaa saman aliavaruuden kuin alkuperaiset vektorit. Maximan ko-mennolle gramschmidt vektorijoukko {v1, . . . , vk} ilmaistaan matriisina (vektorit vjmatriisin rivivektoreita) tai listana vektoreita.

(%i34) load(eigen)$

(%i35) m1;

(%o35)

1 −2 54 −1 2−5 1 0

(%i36) gramschmidt(m1);

(%o36) [[1,−2, 5], [22 13

3 5,

1

3 5,−2

3], [

13

2 11 17,

32 13

11 17,

7 13

2 11 17]]

(%i37) ratsimp(%);

(%o37) [[1,−2, 5], [52

15,

1

15,−2

3], [

13

374,117

187,

91

374]]

Komennolla orthogonal_complement(v_1,..., v_n) maarataan annetun vektori-joukon ortogonaalikomplementille kanta. Seuraavassa maarataan matriisin m3 kuva-avaruuden ortogonaalikomplementille kanta (huomaa, miten komennolla part kuva-avaruuden virittajavektorit poimitaan komentoon orthogonal_complement):

(%i38) m3cs:columnspace(m3);

(%o38) span

123

,

234

(%i39) m3oc:orthogonal_complement(part(m3cs,1), part(m3cs,2));

(%o39) span

−12−1

Tarkistuslasku: loydetty vektori on kohtisuorassa kuva-avaruuden virittajavektorei-ta vastaan (jalleen komennon span ”sisaan” piilotettu vektori poimitaan komennollapart):

Page 31: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 31

(%i40) part(m3cs,1).part(m3oc,1);

(%o40) 0

(%i41) part(m3cs,2).part(m3oc,1);

(%o41) 0

10.4. Myohemmilla kursseilla selvitetaan ominaisarvoteoriana tunnettua lineaa-rialgebran osa-aluetta. Seuraavassa sen kummemmitta selityksitta komentoja tatatarkoitusta varten: ominaisarvot ja -vektorit (eigenvalues, eigenvectors), karakteristi-nen polynomi (charpoly).

(%i42) charpoly(m3, x);

(%o42) ((3− x) (5− x)− 16) (1− x)− 2 (2 (5− x)− 12) + 3 (8− 3 (3− x))

(%i43) expand(%);

(%o43) − x3 + 9x2 + 6x

(%i44) solve(%=0, x);

(%o44) [x = −√

105− 9

2, x =

√105 + 9

2, x = 0]

(%i45) float(%);

(%o45) [x = −0.623475382979799, x = 9.623475382979798, x = 0.0]

(%i46) eigenvalues(m3);

(%o46) [[−√

105− 9

2,

√105 + 9

2, 0], [1, 1, 1]]

Symmetrisen matriisin ominaisarvojen numeeriseen maaraamiseen on eigens_by_jacobi:

(%i47) m3es:eigens_by_jacobi(m3);

(%o47)[[3.7565074537625 10−16,−.6234753829797992, 9.623475382979798], 0.408248290463863 .8276709410916353 .3850897903162586−0.816496580927726 0.142413678150614 .55951021224723560.408248290463863 −.5428435847904071 .7339306341782126

](%i48) part(m3es,2);

(%o48)

0.408248290463863 .8276709410916353 .3850897903162586−0.816496580927726 0.142413678150614 .55951021224723560.408248290463863 −.5428435847904071 .7339306341782126

(%i49) invert(part(m3es,2)).m3.part(m3es,2);

(%o49)

−1.812986607347357 10−16 1.387778780781446 10−16 4.440892098500626 10−16

3.162218890087367 10−17 −.6234753829797991 1.332267629550188 10−15

1.242362240299578 10−16 5.828670879282072 10−16 9.623475382979798

Page 32: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 32

(%i50) m1s:m1+transpose(m1);

(%o50)

2 2 02 −2 30 3 0

(%i51) eigenvalues(m1s);

(%o51) [[

(−√

3 i

2− 1

2

) (√2726 i

332

− 9

) 13

+17(√

3 i2− 1

2

)3(√

2726 i

332− 9) 1

3

,

(√3 i

2− 1

2

) (√2726 i

332

− 9

) 13

+17(−√

3 i2− 1

2

)3(√

2726 i

332− 9) 1

3

,

(√2726 i

332

− 9

) 13

+17

3(√

2726 i

332− 9) 1

3

], [1, 1, 1]]

(%i52) rectform(%);

(%o52) [[i (

17

sin

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

+

√3 cos

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

3

(17

32

332

) 13

sin

π−atan

„√2726

372

«3

2

√3(

1732

332

) 13

cos

π−atan

„√2726

372

«3

2

)+

17

3 sin

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

cos

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

3

+

√3(

1732

332

) 13

sin

π−atan

„√2726

372

«3

2

(17

32

332

) 13

cos

π−atan

„√2726

372

«3

2

,

i (

17

sin

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

√3 cos

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

3

(17

32

332

) 13

sin

π−atan

„√2726

372

«3

2

+

Page 33: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 33

√3(

1732

332

) 13

cos

π−atan

„√2726

372

«3

2

)+

17

−√

3 sin

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

cos

0BBB@π−atan

0@√2726

372

1A3

1CCCA2

17

32

332

! 13

3

√3(

1732

332

) 13

sin

π−atan

„√2726

372

«3

2

(17

32

332

) 13

cos

π−atan

„√2726

372

«3

2

,

i

(

1732

332

) 13

sin

π − atan(√

2726

372

)3

−17 sin

π−atan

„√2726

372

«3

3(

1732

332

) 13

+

(17

32

332

) 13

cos

π − atan(√

2726

372

)3

+

17 cos

π−atan

„√2726

372

«3

3(

1732

332

) 13

], [1, 1, 1]]

(%i53) float(%);

(%o53) [[1.147766522073282,2.220446049250313 10−16 i− 4.575379732121659,3.427613210048377− 2.220446049250313 10−16 i], [1.0, 1.0, 1.0]]

(%i54) m1es:eigens_by_jacobi(m1s);

(%o54)[[3.427613210048376,−4.575379732121658, 1.147766522073282],.7255069584021206 −.2465128196309798 −0.642550451768332.5178716588984427 .8104576989548532 .2738015031269544.4532643800475377 −.5314035641227753 .7156547029243453

]

(%i55) invert(part(m1es,2)).m1s.part(m1es,2);

(%o55)

3.427613210048377 4.440892098500626 10−16 2.775557561562891 10−16

−1.110223024625157 10−16 −4.57537973212166 1.665334536937735 10−15

0.0 1.110223024625157 10−15 1.147766522073283

10.5. Erilaisia matriisihajotelmia saadaan komennoilla echelon(M), triangularize(M),lu_factor(M, field), cholesky(M), similaritytransform(M), get_lu_factors(x),invert_by_lu(M, (rng generalring)), lu_backsub(M, b).

Page 34: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 34

11. Grafiikkaa: plot-komennot

Maximan sisaanrakennetut piirtokomennot sopivat ”kevyeen” tyoskentelyyn. Komen-not tunnistaa nimista, joiden osana on plot. Avuksi Maximan kasikirjan luku ”Plot-ting” ja Wilhelm Haager: Graphics with MAXIMA, pdf-dokumentti osoitteessahttp://www.austromath.at/daten/maxima/zusatz/Graphics with Maxima.pdf.wxMaxima-kayttoliittymaan piirtokomennoista on yleensa kaksi versiota: wx-alkuiset,jotka sijoittavat kuvan wxMaxima-dokumenttiin, ja ilman wx-etuliitetta olevat. Vainjalkimmaiset on dokumentoitu kasikirjaan.

11.1. Funktion kuvaaja: y = f(x). Komennolla plot2d voidaan piirtaa yhdentai useamman yhden muuttujan funktion kuvaaja samaan kuvaan.

(%i1) wxplot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011])$

(%t1)

wxplot-komentojen ruudulle muodostaman kuvan voi tallettaa vain rasterigrafiikka-na (png, jpg, bmp tai xpm). Tallainen kuva kelpaa vain ruudulla kaytettavaksi, eijulkaistavaksi/tulostettavaksi. Kun kuva on tarkoitus tallettaa EPS-tiedostoksi, pitaawxplot-komentojen tilalle vaihtaa vastaava plot-komento ja mukaan lisata tallennus-paikka:

plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011],

[gnuplot_term, ps], [gnuplot_out_file, "/Users/lehtonen/plot2d.eps"])$

Jos maare [gnuplot out file, ”<hakemisto>/<nimi>.eps”] jatetaan antamatta, kuva tal-letetaan nimella maxplot.ps oletushakemistoon (kayttajan kotihakemistoon). Kuvanohjaaminen erilaisiin ”ikkunointijarjestelmiin”(toimivuus riipuu kayttoymparistosta):

(i) plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011],

[gnuplot_term, x11])$

(ii) plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011],

[gnuplot_term, aqua])$

(iii) plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011],

[plot_format, xmaxima])$

Page 35: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 35

11.2. Tasa-arvokayra: f(x, y) = c. Kahden muuttujan funktion maaraamatasa-arvokayra piirretaan komennolla wxcontour_plot:

(%i2) wxcontour_plot( x^2 + y^2, [x,-1.5,1.5], [y,-1.5,1.5],

[gnuplot_preamble, "set size ratio -1"] )$

(%t2)

Lisamaare [gnuplot_preamble, "set size ratio -1"] asettaa kuvan x- ja y-akseleillesaman mittayksikon. Ilman tata asetusta ympyrat nayttavat ellipseilta.

11.3. Parametrisoitu kayra: x = x(t), y = y(t). Parametrisoidulle tasokay-ralle pisteen koordinaatit x ja y ilmaistaan jonkin parametrin t funktiona. Parametrit voi kuvata esimerkiksi aikaa tai pitkin kayraa kuljettua matkaa (”kaarenpituuspa-rametri”).

Cornun spiraali maaritellaan ns. Fresnelin integraalien avulla:

(%i3) cornu_spiral:[parametric, fresnel_c(t), fresnel_s(t), [t,-10,10]]$

(%i4) circle:[parametric, cos(t), sin(t), [t,0,2*%pi]]$

(%i5) wxplot2d([cornu_spiral, circle], [nticks, 500],

[gnuplot_preamble, "set size ratio -1"])$

(%t5)

Page 36: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 36

11.4. Data. Muuttujaan lst talletetaan lukupareja (k, s) (s kutakuinkin kuu-kauden k sademaara Jyvaskylassa):

(%i6) lst:[[1,55], [2,15], [3,20], [4,17],

[5,50], [6,85], [7,72], [8,89],

[9,128], [10,57], [11,25], [12,90]]$

Maare discrete kertoo plot-komennolle, etta kyse on lukuparien havainnollistami-sesta:

(%i7) wxplot2d([discrete, lst],

[x,0.5,12.5], [y,0,130], [style, impulses])$

(%t7)

11.5. Kahden muuttujan funktion kuvaaja: z = f(x, y). 3d-grafiikka kan-nattaa usein piirtaa komennon plot3d avulla, ei wxplot3d. Erilliseen ikkunaan piir-rettya 3d-oliota voi pyorittaa hiiren avulla; wxplot3d-komennon tuottama kuva onstaattinen.

(%i8) wxplot3d(x^2 - y^2, [x, -1, 1], [y, -1, 1])$

(%t8)

Page 37: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 37

11.6. Avaruuden parametrisoitu pinta: x = f(u, v), y = g(u, v), z = g(u, v).Edellisen satulapinnan esitys napakoordinaattien avulla:

(%i9) z_rt:ev(x^2 - y^2, x=r*cos(theta), y=r*sin(theta));

(%o9) r2 cos (θ)2 − r2 sin (θ)2

(%i10) wxplot3d([r*cos(theta), r*sin(theta), z_rt],

[r, 0, sqrt(2)], [theta, -%pi, %pi])$

(%t10)

12. Draw-komennot

Erikseen ladattava draw-kirjasto on monipuolinen grafiikkapaketti. Komennot tun-nistaa nimista, joiden osana on draw. Avuksi Maximan kasikirjan luku ”draw” jaWilhelm Haager: Graphics with MAXIMA, pdf-dokumentti osoitteessahttp://www.austromath.at/daten/maxima/zusatz/Graphics with Maxima.pdf.Draw-kirjaston graafisia objekteja:

2d: explicit, parametric, implicit, polar, points, polygon, rectangle, ellipse, triangle,quadrilateral, region, bars, vector, errors

3d: explicit, parametric, parametric surface, implicit, cylindrical, spherical, tu-be, points, triangle, quadrilateral, vector

(%i11) load(draw)$

12.1. Funktion kuvaaja: y = f(x). Jokainen piirrettava kayra ”kehystetaan”explicit-tyyppiseksi grafiikkaolioksi:

(%i12) g1:explicit(x^2, x,-0.01,0.011);

(%o12) explicit(x2, x,−0.01, 0.011

)(%i13) g2:explicit(3*x^2, x,-0.01,0.011)$

(%i14) g3:explicit(x^2*(2+sin(1/x)), x,-0.01,0.011)$

(%i15) wxdraw2d(color=red, g1, color=red, g2, color=green, g3)$

Page 38: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 38

(%t15)

12.2. Tasa-arvokayra: f(x, y) = c. Tasa-arvokayra on implicit-tyyppinen olio:

(%i16) wxdraw2d(

implicit(x^2 + y^2 = 2, x,-1.5,1.5, y,-1.5,1.5)

)$

(%t16)

Vaikka kayran pitaisi yhtalonsa perusteella on ympyra, ei se silta nayta. draw-kirjastossakomento proportional_axes=xy tai user_preamble="set size ratio -1" asettaax- ja y-akseleille saman mittayksikon:

(%i17) wxdraw2d(proportional_axes=xy,

implicit(x^2 + y^2 = 2, x,-1.5,1.5, y,-1.5,1.5)

)$

(%t17)

Page 39: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 39

12.3. Parametrisoitu kayra: x = x(t), y = y(t). Parametrimuodossa annettukayra kehystetaan parametric-olioksi. Kayttajan tehtavaksi jaa eri kayrien erotelta-vuuden jarjestaminen (kuvassa varien valinta):

(%i18) cornu_spiral:parametric( fresnel_c(t), fresnel_s(t), t,-5,5)$

(%i19) circle:parametric(cos(t), sin(t), t, 0, 2*%pi)$

(%i20) wxdraw2d(proportional_axes=xy,

nticks=200,

color=red, cornu_spiral,

color=blue, circle)$

(%t20)

12.4. Data. Piirretaan sama sademaarien kuukausijakauma kuin aiemmin. Pis-tepareina oleva data ilmaistaan points-tyyppisena oliona. Pisteiden esitystapa valitaanlisamaareilla, tassa points_joined=impulses:

(%i21) lst:[[1,55], [2,15], [3,20], [4,17],

[5,50], [6,85], [7,72], [8,89],

[9,128], [10,57], [11,25], [12,90]]$

(%i22) wxdraw2d(xrange=[0.5,12.5], yrange=[0,130],

fill_color=blue, points_joined=impulses,

points(lst) )$

(%t22)

Page 40: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 40

Vaihdetaan datan esitystapa pylvasdiagrammiksi eli bars-olioksi. Pylvasdiagrammejavarten datapisteissa pitaa kolmantena komponenttina olla pylvaan leveys (tassa 0.8):

(%i23) lst2:makelist([lst[j][1], lst[j][2], 0.8], j,1,length(lst));

(%o23) [[1, 55, 0.8], [2, 15, 0.8], [3, 20, 0.8], [4, 17, 0.8], [5, 50, 0.8], [6, 85, 0.8],[7, 72, 0.8], [8, 89, 0.8], [9, 128, 0.8], [10, 57, 0.8], [11, 25, 0.8], [12, 90, 0.8]]

Muutetaan lista pylvasdiagrammi-olioksi (taman olisi voinut tehda heti suoraankin):

(%i24) apply(bars, lst2);

(%o24) bars([1, 55, 0.8], [2, 15, 0.8], [3, 20, 0.8], [4, 17, 0.8], [5, 50, 0.8], [6, 85, 0.8],[7, 72, 0.8], [8, 89, 0.8], [9, 128, 0.8], [10, 57, 0.8], [11, 25, 0.8], [12, 90, 0.8])

(%i25) wxdraw2d(xrange=[0.5,12.5], yrange=[0,130],

fill_color=blue,

apply(bars, lst2) )$

(%t25)

Komennon wxdraw jalkeen kuva ei ole EPS-muodossa talletettavaksi kelpaava, kom-mennon draw jalkeen on. Komento draw file tallettaa viimeisimman draw-komennollapiirretyn kuvan. (Toimiiko tama PC:ssa?)

(%i26) draw2d(xrange=[0.5,12.5], yrange=[0,130],

fill_color=blue,

apply(bars, lst2) )$

draw_file(terminal=eps, dimensions=[1500,1000],

file_name="/Users/lehtonen/draw2d");

Vaihtoehtoisesti: ohjataan kuva terminal-muuttujan avulla tiedostoon:

draw2d(terminal=’eps_color, file_name="/Users/lehtonen/draw2d",

dimensions=[1500, 1000],

xrange=[0.5,12.5], yrange=[0,130],

fill_color=blue,

apply(bars, lst2) )$

HUOMIO: Tulostettavaksi tarkoitettu kuva pitaa tallettaa EPS-muotoon (tai PDF-muotoon; JPEG tai PNG ei ole riittava).

Page 41: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 41

12.5. Kahden muuttujan funktion kuvaaja: z = f(x, y). Kahden muuttu-jan funktion kuvaaja on myos explicit-tyyppinen olio. Piirtokomento draw2d/draw3dmaaraa ”dimension”. Pintaolio talletetaan muuttujaaan g, jotta sita voitaisiin koris-tella eri tavoin. Oletuksena pinta piirretaan rautalankamallina:

(%i27) g:explicit( sin(x)*sin(y), x,-2*%pi,2*%pi, y,-2*%pi,2*%pi)$

(%i28) wxdraw3d(g);

(%t28)

(%o28)

Poistetaan piiloviivat:

(%i29) wxdraw3d(xu_grid=50, yv_grid=50,

surface_hide=true, view=[60, 30],

g);

(%t29)

(%o29)

Lisataan kuvaan varitys lisamaareella enhanced3d=true ja xy-tasoon projisoitujatasa-arvokayria lisamaareella contour=base:

(%i30) wxdraw3d(xu_grid=50, yv_grid=50,

enhanced3d=true, surface_hide=true, view=[60, 30],

contour=base,

g);

Page 42: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 42

(%t30)

(%o30)

Erilliseen ikkunaan piirrettya 3d-oliota voi pyorittaa hiiren avulla; wxdraw3d-komentojentuottamat kuvat ovat taysin staattisia.

(%i31) draw3d(xu_grid=50, yv_grid=50,

enhanced3d=true, surface_hide=true, view=[60, 30],

contour=both,

g);

(%o31) [gr3d (explicit)]

Kun contour-tyyppi on map, kuvaa katsotaan suoraan ylhaalta; pinnasta piirretaankorkeuskayrasto:

(%i32) wxdraw3d(xu_grid=50, yv_grid=50,

contour_levels=10, contour=map,

g);

(%t32)

(%o32)

Page 43: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 43

12.6. Tasa-arvopinta f(x, y, z) = c. Piirretaan pallopinta x2 + y2 + z2 = 1yhtalon avulla. (Tama piirtotapa on laskennallisesti raskas eika tulos ole useinkaanerityisen hyva, mutta hatatapauksessa nainkin.)

(%i33) wxdraw3d(enhanced3d=true, surface_hide=true,

proportional_axes=xyz,

x_voxel=15, y_voxel=15, z_voxel=15,

implicit( x^2 + y^2 + z^2 = 1,

x, -1.1, 1.1, y, -1.1, 1.1, z, -1.1, 1.1) )$

(%t33)

12.7. Parametrisoitu pinta: x = f(u, v), y = g(u, v), z = g(u, v). Piirretaanpallopinta maantieteellisen pallokoordinaattiparametrisoinnin avulla:

(%i34) s2:[cos(theta)*cos(phi), sin(theta)*cos(phi), sin(phi)];

(%o34) [cos (φ) cos (θ) , cos (φ) sin (θ) , sin (φ)]

(%i35) wxdraw3d(enhanced3d=true, surface_hide=true,

proportional_axes=xyz,

xrange=[-1.1, 1.1], yrange=[-1.1, 1.1], zrange=[-1.1, 1.1],

parametric_surface( s2[1], s2[2], s2[3],

theta, -%pi/2,%pi, phi, -%pi/2,%pi/2)

)$

(%t35)

Page 44: Symbolinen laskenta, syksy 2013 - users.jyu.fiusers.jyu.fi/~lehtonen/opetus/sl2013/SL_esim.pdf · Funktio vs. lauseke. Matematiikan kursseilla puhutaan tavallisesti funk- Matematiikan

SYMBOLINEN LASKENTA, SYKSY 2013 44

12.8. Parametrisoitu kayra: x = f(t), y = g(t), z = g(t). Konstruoidaanpallopinnalle kayra, jota parametritasossa vastaa suora:

(%i36) s2_c:ev(s2, phi=0.1*theta);

(%o36) [cos (0.1 θ) cos (θ) , cos (0.1 θ) sin (θ) , sin (0.1 θ)]

(%i37) c:parametric(s2_c[1], s2_c[2], s2_c[3],

theta, -6*%pi, 6*%pi)$

Spiraali (ns. loksodromi) pallopinnalla etelanavalta pohjoisnavalle:

(%i38) wxdraw3d(enhanced3d=false, surface_hide=true,

proportional_axes=xyz,

xrange=[-1.1, 1.1], yrange=[-1.1, 1.1], zrange=[-1.1, 1.1],

nticks=500, line_width=2, color=red,

c)$

(%t38)

Yhdistetaan pallopinta ja loksodromi:

(%i39) wxdraw3d(enhanced3d=false, surface_hide=true,

proportional_axes=xyz,

xrange=[-1.1, 1.1], yrange=[-1.1, 1.1], zrange=[-1.1, 1.1],

parametric_surface( s2[1], s2[2], s2[3],

theta, -%pi,%pi, phi, -%pi/2,%pi/2),

nticks=500, line_width=2, color=red,

c)$

(%t39)