Simo K. Kivelä / 06.08.2002
Periaatteessa interaktiivinen symbolinen laskentaohjelma on kuin laajennettu taskulaskin: voidaan laskea numeerisia arvoja lausekkeille, muokata (sieventää eri tavoin, derivoida, integroida jne.) symbolisia, ts. kirjaimia sisältäviä lausekkeita, laatia erilaisia graafisia esityksiä (funktioiden kuvaajia, tilastoja yms.), kirjoittaa ohjelmakoodeja ohjelman omalla kielellä, tallettaa syötteet ja tulosteet dokumentiksi, joka voidaan varustaa selittävillä teksteillä, jne. Dokumentti voidaan tulostaa paperille tai muuntaa www-sivuiksi. Tämä esitys on juuri tällainen dokumentti.
Laskentaohjelmat on perinteisesti jaettu numeerisiin ja symbolisiin. Edelliset laskevat ainoastaan numeerisia laskuja, jälkimmäiset kykenevät käsittelemään myös lausekkeita. Molemmissa on yleensä mahdollisuudet graafisten esitysten tekemiseen. Nykyään ero on hämärtynyt: symboliset ohjelmat ovat yleensä erittäin tehokkaita myös numeerisessa laskennassa, alunperin numeerisiin ohjelmiin on liitetty symbolisen laskennan mahdollistavia komponentteja.
Tunnetuimmat ja laajimpaan käyttöön levinneet symboliset ohjelmat ovat Mathematica ja Maple. Kolmantena kannattanee mainita muPad. Myös ilmaisia ohjelmia on saatavissa (esimerkiksi Maxima, Yacas), mutta ominaisuuksiltaan nämä ovat vaatimattomampia ja usein hieman vanhahtavia. Numeerisista ohjelmista merkittävimmät ovat Matlab ja Mathcad. Kummassakin on nykyään myös symbolisia ominaisuuksia, jotka ovat peräisin mukaan liitetyistä Maple-ohjelman komponenteista.
Tämä dokumentti esittelee Mathematica-ohjelman perusominaisuudet.
Ohjelma tallettaa muistiin kaikki syötteet ja välitulokset. Näihin voidaan missä tahansa laskennan vaiheessa viitata tulostuksen numerolla
(esimerkiksi Out[12] tai %12). Jos tulokselle on annettu nimi (mikä on suositeltavaa), siihen voidaan viitata myös tällä nimellä.
Pitkässä istunnossa saattaa aiheutua ongelmia siitä, että muistissa on vanhoja tuloksia talletettuja nimellä, jonka käyttäjä jo on unohtanut tai jonka hän kuvittelee tarkoittavan jotakin muuta. Tämän johdosta kannattaa usein aluksi puhdistaa muisti hieman kryptisellä komennolla:
![[Graphics:Images/johdanto1_gr_1.gif]](Images/johdanto1_gr_1.gif)
Muodostetaan lauseke, jossa on kaksi muuttujaa (symbolia), x ja y, ja talletetaan tämä nimelle lsk:
![[Graphics:Images/johdanto1_gr_2.gif]](Images/johdanto1_gr_2.gif)
Lausekkeita voidaan sieventää useilla eri tavoilla. Ei ole itsestään selvää, mitä sievä kussakin tapauksessa tarkoittaa; se riippuu siitä, mitä lausekkeelle on seuraavaksi tarkoitus tehdä. Tämän johdosta sieventämiskomentoja on useita erilaisia eikä niiden hallinta aina ole helppoa. Kunkin komennon argumentti (lauske, johon operaatio kohdistuu) annetaan hakasuluissa. Tämä on yleinen tapa merkitä funktioita Mathematicassa; funktiotahan nämä komennotkin ovat. Esimerkkeinä lausekkeen kehittäminen, tekijöihin jako ja ns. osamurtokehitelmän muodostaminen; erilaisia sievennyskomentoja on kuitenkin paljon enemmän.
![[Graphics:Images/johdanto1_gr_4.gif]](Images/johdanto1_gr_4.gif)
![[Graphics:Images/johdanto1_gr_6.gif]](Images/johdanto1_gr_6.gif)
![[Graphics:Images/johdanto1_gr_8.gif]](Images/johdanto1_gr_8.gif)
![[Graphics:Images/johdanto1_gr_10.gif]](Images/johdanto1_gr_10.gif)
Algebrallisten yhtälöiden ratkaisemiseen on oma komentonsa. Tälle annetaan kaksi argumenttia: ratkaistava yhtälö ja tuntematon. Yhtälön yhtäläisyysmerkki on ==. (Yksi yhtäläisyysmerkki = tarkoittaa arvon sijoittamaista jollekin nimelle, kuten edeltä ilmenee.) Tulos saadaan ns. korvaussäännön muodossa.
![[Graphics:Images/johdanto1_gr_12.gif]](Images/johdanto1_gr_12.gif)
Joskus tulos voi olla pitkähkö. Seuraavassa muodostetaan itse asiassa yleinen neljännen asteen yhtälön ratkaisukaava, joka talletetaan korvaussäännön muodossa nimelle rtk.
![[Graphics:Images/johdanto1_gr_14.gif]](Images/johdanto1_gr_14.gif)
![[Graphics:Images/johdanto1_gr_16.gif]](Images/johdanto1_gr_16.gif)
Korvaussääntöä voidaan käyttää seuraavalla tavalla. Muodostetaan aluksi eräs neljännen asteen polynomi ja sijoitetaan tämän kertoimet itse kirjoitetun korvaussäännön avulla edellä saatuun ratkaisuun. Tällöin tarvitaan korvausoperaattori /. (täydellisemmältä nimeltään ReplaceAll). Kun tulos sievennetään (yleinen sievennyskomento Simplify ei tässä riitä, vaan tarvitaan vahvempi FullSimplify) saadaan oikeat juuret (korvaussäännön muodossa). Joissakin tapauksissa sievennys- (ja muutkin) funktiot voidaan kirjoittaa myös lausekkeen oikealle puolelle kahden kautta-viivan perään; esimerkiksi lsk//Expand on sama kuin Expand[lsk].
![[Graphics:Images/johdanto1_gr_18.gif]](Images/johdanto1_gr_18.gif)
![[Graphics:Images/johdanto1_gr_20.gif]](Images/johdanto1_gr_20.gif)
![[Graphics:Images/johdanto1_gr_22.gif]](Images/johdanto1_gr_22.gif)
Lopuksi tulos voidaan sijoittaa yhtälöön ja katsoa, toteutuuko se.
![[Graphics:Images/johdanto1_gr_24.gif]](Images/johdanto1_gr_24.gif)
Aina ei kuitenkaan voi onnistua. Muodostetaan uusi neljännen asteen polynomi ja ratkaistaan se toisaalta suoraan Solve-komennolla, toisaalta sijoittamalla polynomin kertoimet ratkaisukaavaan. Saatu ratkaisukaava ei siis olekaan aivan yleinen!
![[Graphics:Images/johdanto1_gr_26.gif]](Images/johdanto1_gr_26.gif)
![[Graphics:Images/johdanto1_gr_28.gif]](Images/johdanto1_gr_28.gif)
![[Graphics:Images/johdanto1_gr_30.gif]](Images/johdanto1_gr_30.gif)
Derivointi ja integrointi tapahtuvat yksinkertaisesti.
![[Graphics:Images/johdanto1_gr_36.gif]](Images/johdanto1_gr_36.gif)
![[Graphics:Images/johdanto1_gr_38.gif]](Images/johdanto1_gr_38.gif)
![[Graphics:Images/johdanto1_gr_40.gif]](Images/johdanto1_gr_40.gif)
Mathematica kuitenkin tuntee tavallisten alkeisfunktioiden lisäksi melkoisen määrän myös ns. erikoisfunktioita.
![[Graphics:Images/johdanto1_gr_42.gif]](Images/johdanto1_gr_42.gif)
Tälle saadaan myös numeerinen arvo (funktio N tuottaa numeerisen arvon, prosenttimerkki viittaa edelliseen tulosteeseen).
![[Graphics:Images/johdanto1_gr_44.gif]](Images/johdanto1_gr_44.gif)
Virheellisiä tuloksia voi kuitenkin yllättäen syntyä. Jos integroidaan symbolisesti ja tuloksesta lasketaan numeerinen arvo, saadaan eri tulos kuin integroimalla suoraan numeerisesti. Kyseessä on sinänsä ymmärrettävä ongelma, joka aiheutuu kyseessä olevan erikoisfunktion ominaisuuksita kompleksialueella. Jälkimmäisessä syötteessä on käytetty pelkän näppäimistön sijasta myös Mathematican syötepaletteja.
![[Graphics:Images/johdanto1_gr_46.gif]](Images/johdanto1_gr_46.gif)
![[Graphics:Images/johdanto1_gr_48.gif]](Images/johdanto1_gr_48.gif)
![[Graphics:Images/johdanto1_gr_50.gif]](Images/johdanto1_gr_50.gif)
![[Graphics:Images/johdanto1_gr_52.gif]](Images/johdanto1_gr_52.gif)
Numeerisessa laskennassa voidaan käyttää periaatteessa mielivaltaisen monta numeroa. Käytännössä koneen muisti ja laskenta-aika asettavat rajoituksensa. Käytetty syntaksi on luonnollinen. Kertomerkki on joko välilyönti tai *; pois sitä ei voida (yleensä) jättää.
![[Graphics:Images/johdanto1_gr_53.gif]](Images/johdanto1_gr_53.gif)
![[Graphics:Images/johdanto1_gr_55.gif]](Images/johdanto1_gr_55.gif)
Kertoma ilmaistaan tavalliseen tapaan huutomerkillä.
![[Graphics:Images/johdanto1_gr_57.gif]](Images/johdanto1_gr_57.gif)
Luku π syötetään nimellä Pi tai se voidaan valita valikosta. Funktiolla N sille voidaan laskea haluttu määrä desimaaleja. (Desimaaleja tunnetaan nykyään hieman yli 206 miljardia. Kovin monen desimaalin laskeminen tukkii Mathematican varsin tohokkaasti.)
![[Graphics:Images/johdanto1_gr_59.gif]](Images/johdanto1_gr_59.gif)
![[Graphics:Images/johdanto1_gr_61.gif]](Images/johdanto1_gr_61.gif)
![[Graphics:Images/johdanto1_gr_63.gif]](Images/johdanto1_gr_63.gif)
Jos syötteessä on desimaaliluku (jossa käytetään desimaalipistettä, ei -pilkkua), tulos lasketaan desimaalilukuna, muutoin lasketaan ns. tarkoilla arvoilla.
![[Graphics:Images/johdanto1_gr_65.gif]](Images/johdanto1_gr_65.gif)
![[Graphics:Images/johdanto1_gr_67.gif]](Images/johdanto1_gr_67.gif)
Polynomiyhtälöitä voidaan ratkaista algebrallisesti komennolla Solve. Jos ratkaisuille ei kyetä löytämään juurilausekkeita, käytetään ratkaisun esittämiseen erityistä Root-konstruktiota. Polynomiyhtälöt voidaan ratkaista myös suoraan numeerisesti komennolla NSolve. (Symboli i tarkoittaa imaginaariyksikköä.)
![[Graphics:Images/johdanto1_gr_69.gif]](Images/johdanto1_gr_69.gif)
![[Graphics:Images/johdanto1_gr_71.gif]](Images/johdanto1_gr_71.gif)
![[Graphics:Images/johdanto1_gr_73.gif]](Images/johdanto1_gr_73.gif)
Kumpikaan funktioista Solve tai NSolve ei kuitenkaan (yleensä) ratkaise transkendenttiyhtälöitä. Tällaiset voidaan ratkaista numeerisesti funktiolla FindRoot, joka käyttää tehostettua Newtonin menetelmää ja tarvitsee siten jonkin alkuapproksimaation etsittävälle juurelle.
(Jos syötteen loppuun kirjoitetaan puolipiste, tulos vain lasketaan, mutta sitä ei näytetä.)
![[Graphics:Images/johdanto1_gr_75.gif]](Images/johdanto1_gr_75.gif)
![[Graphics:Images/johdanto1_gr_76.gif]](Images/johdanto1_gr_76.gif)
![[Graphics:Images/johdanto1_gr_79.gif]](Images/johdanto1_gr_79.gif)
![[Graphics:Images/johdanto1_gr_82.gif]](Images/johdanto1_gr_82.gif)
![[Graphics:Images/johdanto1_gr_84.gif]](Images/johdanto1_gr_84.gif)
![[Graphics:Images/johdanto1_gr_86.gif]](Images/johdanto1_gr_86.gif)
Graafisten esitysten tekemiseen on useita komentoja.
Yhden muuttujan funktion kuvaaja:
![[Graphics:Images/johdanto1_gr_87.gif]](Images/johdanto1_gr_87.gif)
Parametrimuodossa, so. muodossa ,
olevan tasokäyrän piirtäminen:
![[Graphics:Images/johdanto1_gr_92.gif]](Images/johdanto1_gr_92.gif)
Muodossa olevan funktion kuvaaja on kolmiulotteisen avaruuden pinta. Tähän, kuten moniin muihinkin grafiikkakomentoihin voidaan lisämääreitä, ns. optioita, joilla voidaan vaikuttaa kuvan ulkoasuun.
![[Graphics:Images/johdanto1_gr_96.gif]](Images/johdanto1_gr_96.gif)
![[Graphics:Images/johdanto1_gr_99.gif]](Images/johdanto1_gr_99.gif)
Pinnan korkeuskäyrät:
![[Graphics:Images/johdanto1_gr_102.gif]](Images/johdanto1_gr_102.gif)
Parametrimuodossa, so. muodossa ,
,
oleva avaruuskäyrä ja samoin parametrimuodossa, so. muodossa
,
,
oleva kolmiulotteisen avaruuden pinta; lisäoptioita voidaan jälleen käyttää:
![[Graphics:Images/johdanto1_gr_111.gif]](Images/johdanto1_gr_111.gif)
![[Graphics:Images/johdanto1_gr_114.gif]](Images/johdanto1_gr_114.gif)
Muodossa olevia käyriä voidaan myös piirtää, mutta tarvittava piirtokomento ei kuulu perus-Mathematicaan, vaan se on ensin ladattava.
![[Graphics:Images/johdanto1_gr_118.gif]](Images/johdanto1_gr_118.gif)
![[Graphics:Images/johdanto1_gr_119.gif]](Images/johdanto1_gr_119.gif)
Seuraavassa esimerkissä on ensin muodostettu lista satunnaisluvuista ja sen jälkeen piirrretty pisteistö koordinaatistoon.
![[Graphics:Images/johdanto1_gr_122.gif]](Images/johdanto1_gr_122.gif)
![[Graphics:Images/johdanto1_gr_124.gif]](Images/johdanto1_gr_124.gif)
Pisteet voidaan yhdistää murtoviivalla antamalla lisäoptio.
![[Graphics:Images/johdanto1_gr_127.gif]](Images/johdanto1_gr_127.gif)
![[Graphics:Images/johdanto1_gr_130.gif]](Images/johdanto1_gr_130.gif)