MATEMAATTISET OHJELMISTOT



Samankaltaiset tiedostot
Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Zeon PDF Driver Trial

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Matriiseista. Emmi Koljonen

Harjoitus 10: Mathematica

plot(f(x), x=-5..5, y= )

Valitse ruudun yläosassa oleva painike Download Scilab.

Matlabin perusteita Grafiikka

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Harjoitus 3 -- Ratkaisut

Matlabperusteita, osa 1. Heikki Apiola Matlab-perusteita, osa 1. Heikki Apiola. 12. maaliskuuta 2012

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ITKP102 Ohjelmointi 1 (6 op)

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Matlab- ja Maple- ohjelmointi

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

BL40A0000 Säätötekniikan ja signaalinkäsittelyn

11. Javan toistorakenteet 11.1

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

ATK tähtitieteessä. Osa 2 - IDL perusominaisuudet. 12. syyskuuta 2014

Matlab-perusteet. Jukka Jauhiainen. OAMK / Tekniikan yksikkö. Hyvinvointiteknologian koulutusohjelma

wxmaxima-pikaopas Ari Lehtonen

Johdatus Ohjelmointiin

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

12. Javan toistorakenteet 12.1

Kon Konepajojen tuotannonohjaus: ILOG CPLEX Studion käyttö

12. Javan toistorakenteet 12.1

BM20A0700, Matematiikka KoTiB2

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

Juha Merikoski. Jyväskylän yliopiston Fysiikan laitos Kevät 2009

mplperusteet 1. Tiedosto: mplp001.tex Ohjelmat: Maple, [Mathematica] Sievennä lauseke x 1 ( mplp002.tex (PA P1 s.2011)

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

ABTEKNILLINEN KORKEAKOULU

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Luento 4. Timo Savola. 21. huhtikuuta 2006

Mathcad Prime. Kaur Jaakma

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Ohjelmoinnin perusteet Y Python

Sisältö. 22. Taulukot. Yleistä. Yleistä

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3

811120P Diskreetit rakenteet

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

ATK tähtitieteessä. Osa 5 - IDL datan sovitusta ja muita ominaisuuksia. 25. syyskuuta 2014

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

TAMPEREEN TEKNILLINEN YLIOPISTO

Harjoitus 4 -- Ratkaisut

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

ATK tähtitieteessä. Osa 5 - IDL datan sovitusta ja muita ominaisuuksia. 25. syyskuuta 2014

Harjoitus 1 -- Ratkaisut

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

IDL - datan sovitus. ATK tähtitieteessä. IDL - esimerkiksi linfit. IDL - esimerkiksi linfit

Tietueet. Tietueiden määrittely

Sisältö. 2. Taulukot. Yleistä. Yleistä

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Harjoitus 1 -- Ratkaisut

Laskuharjoitus 9, tehtävä 6

Ohjelmoinnin peruskurssien laaja oppimäärä

Tieto- ja tallennusrakenteet

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Komentotulkki. Kysymyksiä

811120P Diskreetit rakenteet

Heikki Apiola, Juha Kuortti, Miika Oksman. 5. lokakuuta Matlabperusteita, osa 1

Osoitin ja viittaus C++:ssa

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Ohjeita LINDOn ja LINGOn käyttöön

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

MICROSOFT EXCEL 2010

Tietotyypit ja operaattorit

Algoritmit 1. Luento 3 Ti Timo Männikkö

Opiskelijan pikaopas STACK-tehtäviin. Lassi Korhonen, Oulun yliopisto

BJ30A1000 Kemiantekniikan tietotekniikka Fortran

Oppimistavoitematriisi

Oppimistavoitematriisi

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Johdatus tekoälyn taustalla olevaan matematiikkaan

DIFFERENTIAALI- JA INTEGRAALILASKENTA

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Lyhyt kertaus osoittimista

Hannu Mäkiö. kertolasku * jakolasku / potenssiin korotus ^ Syöte Geogebran vastaus

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Tieteellinen laskenta 2 Törmäykset

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

ITKP102 Ohjelmointi 1 (6 op)

1. Lineaarialgebraa A := Matriisin osia voidaan muutella päivittämällä riviä, saraketta tai osamatriisia (Matlabmaisesti): B :=

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Transkriptio:

MATEMAATTISET OHJELMISTOT ESA LAMMI, JUHA HAATAJA, JUSSI HEIKONEN, YRJÖ LEINO, MIKKO LYLY JA VILLE SAVOLAINEN CSC

Matemaattiset ohjelmistot

Matemaattiset ohjelmistot Esa Lammi, Juha Haataja, Jussi Heikonen, Yrjö Leino, Mikko Lyly ja Ville Savolainen Tieteen tietotekniikan keskus CSC

Tämän teoksen tekijänoikeudet kuuluvat CSC Tieteellinen laskenta Oy:lle. Teoksen tai osia siitä voi kopioida ja tulostaa vapaasti henkilökohtaiseen käyttöön sekä Suomen yliopistojen ja korkeakoulujen kurssikäyttöön edellyttäen, että kopioon tai tulosteeseen liitetään tämä ilmoitus teoksen tekijästä ja tekijänoikeuksista. Teosta ei saa myydä tai sisällyttää osaksi muita teoksia ilman CSC:n lupaa. c Tekijät ja CSC Tieteellinen laskenta Oy 2004 http://www.csc.fi/oppaat/mat.ohj/

Matemaattiset ohjelmistot 5 Esipuhe Matematiikan ohjelmistot ovat runsaassa käytössä Tieteen tietotekniikan keskuscsc:n ylläpitämillä tietokoneilla. Nämä ohjelmistot hyödyttävät kaikkien tieteenalojen edustajia. Täten matematiikan ohjelmisto-oppaan tarve on ilmeinen. Tämä Matemaattiset ohjelmistot -opas on vuonna 1998 ilmestyneen vastaavan oppaan päivitetty versio. Opas ei korvaa ohjelmistokohtaisia oppaita, vaan pyrkii antamaan tiiviin yleiskatsauksen matemaattisten ohjelmistojen ominaisuuksiin ja käyttöön. Oppaan runko on peräisin CSC:n asiakaslehdissä ilmestyneistä artikkeleista sekä koneiden opastusjärjestelmien teksteistä. Tämän neljännen painoksen kirjoittivat ja toimittivat Juha Haataja, Jussi Heikonen, Esa Lammi, Yrjö Leino, Mikko Lyly ja Ville Savolainen. Toivomme saavamme palautetta tämän oppaan lukijoilta. Kommentteja otetaan vastaan sähköpostiosoitteessa Esa.Lammi@csc.fi. Otaniemessä 22. tammikuuta 2004 Tekijät

6 Matemaattiset ohjelmistot Sisältö Esipuhe 5 1 Teoksen lukijalle 8 1.1 Merkinnöistä.... 8 1.2 Tieteen tietotekniikan keskus CSC.... 9 1.3 CSC:n yhteystiedot... 9 1.4 Sovellusohjelmistojen käytöstä... 10 1.5 X-ikkunointijärjestelmä.... 10 1.6 Kirjallisuutta.... 10 2 Miten ratkaisenongelmani? 13 2.1 Mallintaminen ja tehtäväluokat... 13 2.2 Ohjelmiston valinta... 13 2.3 Ohjelmointikielen valinta ja tehokas ohjelmointityyli.... 14 2.4 Ohjelmointikielten ominaisuuksia.... 15 2.5 Tehokas ohjelmointityyli... 17 2.6 Käyttöesimerkki: lineaarialgebraa.... 17 2.7 Toinen käyttöesimerkki: kuvankäsittely... 20 2.8 Prototyyppityöskentely.... 22 2.9 Eri ympäristöjen yhteiskäyttö... 23 2.10 Lisätietoja... 23 3 Matemaattiset sovellusohjelmistot 25 3.1 Matlab... 25 3.2 IDL... 30 3.3 Matemaattiset sovellusohjelmistot.... 32 3.4 Mathematica... 33 3.5 Maple... 36 3.6 Reduce... 37 3.7 Graafiset kuvaajat... 38 3.8 Laskuesimerkit... 40 4 Tilastolliset ohjelmistot 44 4.1 SAS.... 44

Sisältö 7 4.2 Splus... 46 5 Monifysikaalinen mallintaminen 49 5.1 Differentiaaliyhtälöt.... 49 5.2 PDE2D... 50 5.3 Elmer... 52 5.4 FEMLAB... 56 6 Ohjelmointi 58 6.1 Millaisia välineitä?... 58 6.2 Fortran... 58 6.3 ANSI C... 60 6.4 C++... 60 6.5 Fortran- ja C-kielten yhteiskäyttö... 60 6.6 Aliohjelmakirjastojen kutsuminen C-ohjelmista... 66 6.7 Rinnakkaislaskenta.... 69 6.8 Lisätietoja.... 69 7 Aliohjelmakirjastot 71 7.1 Milloin aliohjelmakirjastoja kannattaa käyttää?... 71 7.2 BLAS... 72 7.3 Lapack... 76 7.4 IMSL... 82 7.5 NAG... 85 7.6 IBM:n ESSL-kirjastot.... 88 7.7 Compaqin DXML-kirjasto... 90 7.8 SGI/Cray Scientific Library... 91 7.9 Harwell Subroutine Library... 91 7.10 ARPACK ja P_ARPACK... 95 7.11 TOMS-algoritmit... 97 Liite 98 A CSC:n ympäristön pikaohje 99 B Emacs-editorin pikaopas 101 Hakemisto 104

8 Matemaattiset ohjelmistot 1 Teoksen lukijalle Tämä opas esittelee tärkeimmät CSC:n asiantuntijoiden tukemat matemaattiset ohjelmistot. Opas on kirjoitettu tutkijoille ja insinööreille, jotka työssään tarvitsevat matemaattisia ohjelmistoja. CSC on lisäksi julkaissut mm. numeerisia menetelmiä ja ohjelmointia käsitteleviä teoksia. 1.1 Merkinnöistä Tässä oppaassa teletype-kirjasintyyppi tarkoittaa, että kyseessä on tiedoston tai komennon nimi tai tietokoneen tuottama tulostus. Kuitenkin jos halutaan selvästi erottaa, mikä teksti on kehotetta, mikä on käyttäjän syötettä ja mikä on tietokoneen tulostusta, on käytetty seuraavanlaisia kirjasintyyppejä: % pwd /csc Tässä tietokoneen kehote on %, käyttäjän antama komento on lihavoitu ja tietokoneen vastaus on ladottu teletype-kirjasintyypillä. Komentojen esittelyssä yleiset nimet, joiden paikalle käyttäjän tulee kirjoittaa esimerkiksi tiedostonimi, on ladottu vinokirjaimilla: rm tiedosto Niin ikään komentojen esittelyissä valinnaiset osat on kirjoitettu hakasulkuihin: more [valitsimet] [tiedosto] Laatikolla ympäröity sana tarkoittaa näppäimen painallusta. Esimerkiksi merkintä Tab tarkoittaa tabulaattorinäppäimen painallusta. Merkintä ˆx tarkoittaa näppäinpainallusta, jossa Ctrl -näppäin alaspainettuna painetaan x-näppäintä. Tekstissä esiintyvät lyhenteet ja erisnimet on yleensä kirjoitettu kuten Unix. Uusien termien esittelyyn ja muutenkin tekstin korostamiseen on käytetty kursiivia.

1 Teoksen lukijalle 9 1.2 Tieteen tietotekniikan keskus CSC CSC on opetusministeriön omistama tieteen tietotekniikan keskus. CSC tarjoaa yliopistoille ja tutkimuslaitoksille tietoteknistä tukea ja resursseja: mallinnus- ja laskentapalveluja sekä informaatiopalveluja. Tutkijat voivat käyttää CSC:ssä sijaitsevia Suomen laajinta tieteellisten ohjelmistojen ja tieteen tietokantojen valikoimaa sekä Suomen tehokkainta superlaskentaympäristöä Funet-tietoliikenneyhteyksien kautta. 1.3 CSC:n yhteystiedot Neuvonta CSC:n asiakasneuvojille voi osoittaa kysymyksiä soittamalla CSC:n Help Deskiin, puh. (09) 457 2821, tai lähettämällä sähköpostia tunnukselle helpdesk@csc.fi Tälle tunnukselle tulevat viestit käsitellään useamman kerran päivässä ja tarvittaessa viestit ohjataan eteenpäin sopivalle asiantuntijalle. Käyttäjät voivat ottaa asiantuntijoihin yhteyttä myös suoraan. Kaikki CSC:n työntekijät tavoittaa keskuksen kautta puhelinnumerosta (09) 457 2001. CSC:n matematiikan asiantuntijoiden yhteystiedot löytyvät Web-osoitteesta http://www.csc.fi/suomi/numeriikka.html.fi. Lupahakemukset CSC:n tietokoneiden käyttäjäksi pääseminen edellyttää käyttölupahakemuksen täyttämistä. Kaavakkeita saa CSC:n toimistosta Paula Mäki-Välkkilältä, puh. (09) 457 2718, sähköposti maki@csc.fi tai CSC:n www-sivuilta osoitteesta http:www.csc.fi/suomi/kayttolupahakemus.html.fi. Käyttäjätunnushakemukset tulee lähettää postiosoitteeseen CSC Käyttöluvat PL 405 02101 Espoo Käyttölupia, käyttäjätunnuksia ja salasana-asioita koskeviin kysymyksiin vastaa Aila Lyijynen, puh. (09) 457 2075, sähköposti usermgr@csc.fi.

10 Matemaattiset ohjelmistot 1.4 Sovellusohjelmistojen käytöstä Valtaosa CSC:n sovellusohjelmistoista käynnistyy suoraan antamalla ohjelmiston nimi tai käynnistyskomento. Mitään käyttöympäristön alustuksia ei yleensä tarvita. Lisätietoja CSC:n matemaattisista ohjelmistoista löytyy www-osoitteesta http://www.csc.fi/suomi/numeriikka.html.fi Vastaavasti CSC:n tilastollisista ohjelmista saa lisätietoa www-osoitteesta http://www.csc.fi/suomi/tilastotiede.html.fi CSC:n omaan matemaattisten ja tilastollisten ohjelmistojen opastusjärjestelmään pääsee myös CSC:n www-sivujen pääsivun kautta. Etsittäessä esim. tietoa matemaattisista ohjelmistoista valitaan CSC:n www-pääsivulta kohta Palvelut.Avautuvasta ikkunasta valitaan vaihtoehto Palvelut tieteenaloittain. Tiedealoista valitaan Numeriikka. Numeriikan sivulta kohdasta Ohjelmistot nähdään CSC:n matemaattisten ohjelmistojen lista versioineen ja alustoineen. 1.5 X-ikkunointijärjestelmä X-ikkunointijärjestelmä (X Window System) on hajautettu, laite- ja käyttöjärjestelmäriippumaton ikkunointijärjestelmä, joka on muodostunut standardiksi. X:ää käyttävä sovellusohjelma voi olla eri koneessa kuin näyttö. Laskentapalvelimessa voidaan tällöin ajaa ohjelmia, joiden graafinen käyttöliittymä ja tulostus tulevat paikallisen työaseman ruudulle. Useat matematiikan sovellusohjelmat käyttävät X-ikkunointijärjestelmää grafiikan tuottamiseen. Jos käytettävissäsi on ssh-ohjelmisto, X-käyttöympäristön alustukset tehdään automaattisesti. Lisäksi ssh:ta käytettäessä yhteydet suojataan salakirjoittamalla kaikki liikenne. 1.6 Kirjallisuutta Kunkin ohjelmiston kohdalla on esitetty tärkeimmät käsikirjat ja kirjallisuusviitteet. Järjestelmänkäyttöön liittyvistä asioista, uusista ohjelmistoista ja koulutuksesta tiedotetaan asiakkaille koneiden omien tiedotteiden lisäksi asiakaslehdessä @CSC sekä lehdissä Tietoyhteys ja CSC News. Kaikkialehtiä voi tilata CSC:stä. Seuraavassa on lueteltu muutamia CSC:n oppaita, joista voi olla hyötyä matemaattisten ohjelmistojen käyttäjille:

1 Teoksen lukijalle 11 JuhaHaataja.GAMS-ohjelmiston pikaopas. CSC, 2001. Www-osoite http: //www.csc.fi/oppaat/gams/. Juha Haataja. Optimointitehtävien ratkaiseminen. CSC, 2003. 3. uusittu painos tekeillä. Juha Haataja,Jussi Heikonen, Yrjö Leino, Jussi Rahola, Juha Ruokolainen ja Ville Savolainen. Numeeriset menetelmät käytännössä. CSC, 2002. 2. painos. Juha Haataja ja Kaj Mustikkamäki. Rinnakkaisohjelmointi MPI:llä. CSC, 2001. Www-osoite http://www.csc.fi/oppaat/mpi/. Juha Haataja, Jussi Rahola ja Juha Ruokolainen. Fortran 90/95. CSC, 2001. Jari Hämäläinen ja Jari Järvinen. Elementtimenetelmä virtauslaskennassa. CSC, 1994. Hannu Karttunen. Datan käsittely. CSC, 2001. 2. painos. CSC:n koneiden käyttöoppaita ovat Manta Jääskeläinen, Sirpa Kotila ja Tiina Kupila-Rantala, toim. CSC:n palvelinympäristö. CSC, 2003. ent. Metakoneen käyttöopas, 1. painos, ISBN 952-9821-91-3. Sirpa Kotila, Juha Haataja ja Juha Fagerholm, toim. CSC:n asiakkaan opas. CSC, 2001. 5. painos, Web-osoite http://www.csc.fi/oppaat/ asopas. Tiina Kupila-Rantala, toim. CSC User s Guide. CSC, 2000. 2. painos. Webosoite http://www.csc.fi/oppaat/cscuser. Tiina Kupila-Rantala, toim. Lempo ja Hiisi -käyttöopas. CSC, 2003. Webosoite http://www.csc.fi/oppaat/lempohiisi/. Tiina Kupila-Rantala ja Raimo Uusvuori, toim. IBMSC User s Guide. CSC, 2003. Web-osoite http://www.csc.fi/oppaat/ibmsc/. Matemaattisia ohjelmistoja on esitelty mm. seuraavissa suomenkielisissä teoksissa: Juha Haataja. Optimointitehtävien ratkaiseminen. CSC, 2003. 3. uusittu painos tekeillä. Hannu Karttunen. Datan käsittely. CSC, 2001. 2. painos. Simo K. Kivelä. MATLAB-opas. Otakustantamo, 1991. Seuraavat ovat numeriikkaa käsitteleviä perusteoksia:

12 Matemaattiset ohjelmistot Gene H. Golub ja James M. Ortega. Scientific Computing and Differential Equations An Introduction to Numerical Methods. AcademicPress, 1992. Juha Haataja,JussiHeikonen, YrjöLeino, Jussi Rahola, Juha Ruokolainen ja Ville Savolainen. Numeeriset menetelmät käytännössä. CSC, 2002. David Kahaner, Cleve Moler ja Stephen Nash. Numerical Methods and Software. Prentice-Hall, 1977. Simo K. Kivelä. Matriisilasku ja lineaarialgebra. Otakustantamo, 1984. Matti Mäkelä, Olavi Nevanlinna ja Juhani Virkkunen. Numeerinen matematiikka. Gaudeamus, 1982. William H. Press, Saul A. Teukolsky, William T. Vetterling ja Brian P. Flannery. Numerical Recipes. Cambridge University Press, 1986. John R. Rice. Numerical Methods, Software, and Analysis. McGraw-Hill, 1983. Gilbert Strang. Introduction to Applied Mathematics. Wellesley-Cambridge Press, 1986.

2 Miten ratkaisen ongelmani? 13 2 Miten ratkaisen ongelmani? 2.1 Mallintaminen ja tehtäväluokat Matemaattiset ohjelmistot ovat välineitä tieteellisten ja teknisten ongelmien ratkaisemiseen. Ennen ohjelmistojen käyttöä täytyy ongelma identifioida eli tunnistaa. Tämän jälkeen voidaan löydettyä ongelmaa ruveta mallintamaan, jolloin tuloksena on matemaattinen malli. Malli voi tuottaa ratkaistavaksi esimerkiksi joukon differentiaaliyhtälöitä, optimointitehtävän, tilastollisen tehtävän tai näiden yhdistelmän. Matemaattisen mallin ratkaisemiseen tarvitaan luotettavia ja tehokkaita menetelmiä. Yksinkertaisissa tehtävissä saatetaan löytää tehtävän symbolinen ratkaisu.monimutkaisemmissa tapauksissa täytyy turvautua numeerisen ratkaisualgoritmin löytämiseen tai kehittämiseen. Tehtävä voidaan tällöin ratkaista annetuilla alkuarvoilla tai parametrien arvoilla. Aina ei kuitenkaan edes numeerista ratkaisua onnistuta löytämään, jolloin tehtävää voidaan joutua yksinkertaistamaan ja aloittamaan mallinnuskierros alusta uudelleen. 2.2 Ohjelmiston valinta Tässä oppaassa kerrotaan yleisesti käytetyistä matemaattisista ohjelmistoista. Eräs tapa jakaa ohjelmistot on luokitella ne itsenäisesti käytettäviin sovellusohjelmistoihin sekä muista ohjelmistoista käsin käytettäviin aliohjelmakirjastoihin. Sovellusohjelmistoissa on useimmiten monipuoliset käyttöliittymät ja mahdollisesti myös kehittynyt mallinnus- ja ohjelmointikieli, jonka avulla matemaattisia malleja voidaan määritellä ja ratkoa. Esimerkkejä sovellusohjelmistoista ovat symbolisen laskennan ohjelmisto Mathematica, numeerisen laskennan yleisohjelmisto Matlab sekä kattava tilastollinen ohjelmisto SAS. Aliohjelmakirjastoista tärkeimmät ovat yleiskirjastot IMSL ja NAG, joista kummastakin löytyy noin 1000 aliohjelmaa eri tyyppisten numeeristen tehtävien ratkaisemiseen.

14 Matemaattiset ohjelmistot Taulukko 2.1: Ohjelmankehitykseen käytettyjen kielten ominaisuuksia eri tehtävissä: numeerisessa laskennassa, symbolinkäsittelyssä, grafiikassa ja tilastollisessa analyysissä. Merkintä +++ tarkoittaa erittäin hyvää soveltuvuutta, ++ hyvää ja + välttävää soveltuvuutta. Käännettävien kielien kohdalla käytetty merkintä tarkoittaa, että kyseiseen tarkoitukseen on saatavissa runsaasti aliohjelmakirjastona toteutettuja rutiinikokoelmia; merkintä tarkoittaa kohtuullista ja vähäistä rutiinikokoelmien saatavuutta. Taulukossa on pyritty kuvailemaan tilannetta CSC:n laskentaympäristössä. Kieli Numeriikka Symb.käs. Grafiikka Tilasto FORTRAN 77 ++ Fortran 90 +++ C + C++ ++ Matlab +++ +++ ++ Splus ++ ++ +++ SAS ++ + +++ Mathematica ++ +++ +++ ++ Macsyma + +++ + + Maple ++ +++ +++ ++ Reduce + ++ + + 2.3 Ohjelmointikielen valinta ja tehokas ohjelmointityyli CSC:n tietokoneilla käytetään ohjelmankehitykseen seuraavia välineitä: käännettävät kielet (Fortran 90, FORTRAN 77, C, C++), numeeriset laskentaympäristöt (Matlab, Splus, SAS) ja symbolinkäsittelyjärjestelmät (Mathematica, Macsyma, Maple, Reduce). Taulukossa 2.1 on kerrottu eräiden ohjelmointikielten ja matemaattisten ohjelmistojen soveltumisesta eritehtävätyyppeihin. Erikoisohjelmistoja (ryhmäteoria jne.) ei ole otettu mukaan vertailuun. 2.3.1 Sovellusohjelmistojen käyttö Seuraavassa taulukossa on esitetty eräiden sovellusohjelmistojen käyttötilanne vuodelta 2003 (tammi-syyskuu) kaikki koneet yhteenlaskettuina. Taulukossa on esitetty kunkin ohjelmiston eri koneilta yhteenlasketut CPU-ajat tunteina:

2 Miten ratkaisen ongelmani? 15 Ohjelmisto Aika (CPUh) Matlab 15647 Elmer 1266 Mathematica 101 SAS 101 Maple 16 Tiedoista voi laskea, että Matlab-ajoihin kulutettiin yhteensä noin 650 vuorokauden edestä cpu-aikaa. Tehokkaanohjelmointityylin käyttö on siis tärkeäämuidenkin kuin käännettyjen kielten yhteydessä. Kannattaa myös miettiä, voiko ainakin osan tulkittavilla kielillä suoritetuista laskuista toteuttaa käännettävillä kielillä, jotka voivat olla kymmeniä kertoja nopeampia. 2.4 Ohjelmointikielten ominaisuuksia Monissa sovellusohjelmistoissa on oma ohjelmointikieli matemaattisten mallien määrittelyyn ja ratkaisemiseen. Seuraavassa esitellään ja vertaillaan tärkeimpien CSC:ssä käytettyjen ohjelmointikielien ominaisuuksia. 2.4.1 Matlab Matlabin perustietorakenne on matriisi eli 2-ulotteinen taulukko. Vektorit ja skalaarit käsitellään matriisin erikoistapauksina. Matriisi voidaan myös tulkita kuvankäsittelyssä digitaalikuvaksi. Matlabin versiosta 5 alkaen on myös mahdollisuus käsitellä useampiulotteisia taulukoita. Lisäksi voidaan määritellä solutaulukoita (cell array) ja rakenteisia tietotyyppejä (structure array), joiden alkiot eivät välttämättä ole samaa tyyppiä. Myöskin olio-ohjelmointi on mahdollista Matlabin uusimmissa versioissa. Keskeinen Matlabin puute verrattuna symbolisen matematiikan ohjelmistoihin on se, että tietojenkäsittely on pääsääntöisesti numeerista. Esimerkiksi kuvaajan piirtämistä varten on funktiosta ensin laskettava näytematriisi. Matlabia voidaan laajentaa kirjoittamalla Matlab-funktioita niin sanottuihin M-tiedostoihin eli.m-loppuisiin tiedostoihin sekä liittämällä ulkopuolisia Fortran- tai C-kielisiä aliohjelmia Matlabiin (MEX-tiedostot). Matlabissa on monipuolinen kaksi- ja kolmeulotteinen grafiikka. 2.4.2 Mathematica ja Maple Mathematican ja Maplen monipuolinen perustietorakenne on Lisp-kielestä tuttu lista. Lista on hierarkkinen tietorakenne, jonka alkiot voivat olla mitä tahansa ohjelmistojen tuntemaa tietotyyppiä, mukaanlukien toisia listoja.

16 Matemaattiset ohjelmistot Mathematica esittää vektorit, matriisit ja joukot listoina. Maplessa on omat tietorakenteet joukkoja, assosiatiivisia taulukoita ja matriiseita varten. Maplen monenlaiset tietorakenteet saattavat sekoittaa käyttäjää, mutta verrattuna Mathematicaan Maplessa on paremmat mahdollisuudet tehdä virhetarkistuksia eri tietorakenteita käsiteltäessä. Symbolinkäsittelyjärjestelmien tietoalkiot voivat sisältää numeerista tai symbolista tietoa, mikä mahdollistaa lausekkeiden symbolisen käsittelyn, kuten sieventämisen, derivoinnin tai integroinnin. Mathematicassa ja Maplessa on monipuoliset grafiikkaominaisuudet. Etenkin funktioiden kuvaajien piirtäminen on helppoa. Mathematicaa ja Maplea voi laajentaa määrittelemällä funktioita ja sääntöjä tiedostoissa ja lukemalla nämä sisään ohjelmistoon. Mathematicaan voi liittää ulkoisia aliohjelmia MathLink-protokollaa käyttäen. Puhtaasti numeerista tietoa käsiteltäessä symbolisen laskennan ohjelmistot voivat olla tehottomia, koska algoritmien ja tietorakenteiden pitää pystyä käsittelemään sekä numeerista että symbolista tietoa. 2.4.3 Fortran 90/95 ja FORTRAN 77 Fortran on tärkein tieteellisen ja teknisen laskennan ohjelmointikieli. Uusimmissa standardeissa (Fortran 90 ja Fortran 95) on poistettu useimmat vanhan FORTRAN 77:n ongelmat. Käytössä on paljon ohjelmointia helpottavia piirteitä, kuten aliohjelman paikallisten taulukoiden automaattinen dynaaminen muistinhallinta. Eräs Fortranin vanhan standardin (FORTRAN 77) pahimpia puutteita oli tietorakenteiden puute. Ainoa tietorakenne oli taulukko. Taulukoita ei voitu käsitellä kokonaisuuksina, vaan jokainen taulukon alkio täytyi käydä erikseen läpi. Fortran 90 on itse asiassa kokonaan erilainen ohjelmointikieli kuin perinteinen FORTRAN 77, vaikka Fortran 90 sisältää FORTRAN 77:n osajoukkonaan. Fortran 90:n taulukkosyntaksilla taulukoita voidaan käsitellä kokonaisuuksina. Fortran 90 sisältää rakenteiset tietotyypit sekä esimerkiksi mahdollisuuden operaattoreiden ylilataamiseen. Fortran-kielellä on kirjoitettu valtavasti aliohjelmakirjastoja eri tarkoituksiin. Useimmissa tietokoneympäristöissä voidaan Fortran-kielisiä aliohjelmakirjastoja kutsua muista ohjelmointikielistä. 2.4.4 C ja C++ C-ohjelmointikielessä on taulukkorakenteen lisäksi tietuerakenne sekä osoitinmuuttujat. C-kielen eräs puute on kompleksimuuttujien puuttuminen. Lisäksi osoitinmuuttujien liiallisella käytöllä voi kirjoittaa sekavaa ja vaikeasti optimoitavaa koodia.

2 Miten ratkaisen ongelmani? 17 C++ on kokonaan oliokeskeinen C-ohjelmointikielen laajennus. Sillä voidaan joustavasti määrittää uusia tietotyyppejä ja kirjoittaa niitä käsittelevät operaattorit siten, että tietotyyppien käyttö on mahdollisimman läpinäkyvää. Uusien tietotyyppien tehokas muistinhallinta voi kuitenkin olla vaikeaa. Aloittelijan kirjoittama C++-koodi tuottaa paljon ajonaikaisia tilapäismuuttujia, joiden käyttö hidastaa suoritusta. Numeerisen laskennan kannalta C++:ssa olisi suonut olevan vakiona määritellyn matriisityypin. C++:lla onkin kirjoitettu monia keskenään yhteensopimattomia matriisiluokkia. 2.5 Tehokas ohjelmointityyli Tulkittavissa kielissä (esimerkiksi Matlab) jokainen lause analysoidaan jokaisella suorituskerralla uudestaan, minkä vuoksi sama asia vie paljon enemmän aikaa kuin käännetyllä ohjelmalla toteutettuna. Parhaimmillaan tulkittavat kielet ovat kaikenlaisissa kokeiluissa ja pienehköissä töissä. Raskaimmat tehtävät olisi parempi laskea joko Fortranilla tai C:llä. Matlab-ohjelmien konvertointi Fortraniksi on melko suoraviivainen toimenpide. Tulkittavissa kielissä ohjelmointityylin merkitys korostuu. Esimerkiksi Matlabin matriisioperaatiot ovat erittäin tehokkaita, mutta silmukoiksi aukikirjoitettuina operaatiot hidastuvat tuntuvasti. Fortranissa silmukoiden ja taulukko-operaatioiden välillä ei ole juuri eroa, koskakääntäjätuottaa molemmista oleellisesti saman koodin. Silti taulukkooperaatioita kannattaa käyttää ohjelmien suunnitteluvaiheessa. Kun algoritmin ajattelee näiden operaatioidenavulla, tuloksena on todennäköisesti siisti ja myös tehokkaasti toimiva ohjelma. Mikäli ohjelma toteutetaan C:llä tai sellaisella Fortranilla, jossa näitä operaatioita ei ole, ne on joka tapauksessa hyvin helppo kirjoittaa auki silmukoiksi. 2.6 Käyttöesimerkki: lineaarialgebraa Seuraavassa esitetään eräiden lineaarialgebran perusoperaatioiden toteutukset eräillä ohjelmointikielillä. Olkoot x, b ja r vektoreita avaruudessa R n, matriisi A kooltaan n n ja kerroin c reaaliluku. Kullakin kielellä tehdään seuraavat laskutoimitukset: r = b Ax, n c = r T r = r 2 i, i=1 x = x + c r.

18 Matemaattiset ohjelmistot 2.6.1 Fortran 90 Fortran 90:n taulukkosyntaksia käyttämällä varsinainen ohjelma mahtuu kolmelle riville. Alla on lisäksi alustettu taulukot satunnaisluvulla. Muissa käännettävissä kielissä satunnaislukugeneraattorien kutsut ovat toteutuskohtaisia, joten niitä ei ole esitetty. PROGRAM taulukot IMPLICIT NONE INTEGER, PARAMETER :: n = 10 REAL :: c REAL, DIMENSION(n) :: x, b, r REAL, DIMENSION(n,n) :: a CALL RANDOM_NUMBER(b) CALL RANDOM_NUMBER(x) CALL RANDOM_NUMBER(a) r = b - MATMUL(a,x) c = DOT_PRODUCT(r,r) x = x + c*r END PROGRAM taulukot 2.6.2 FORTRAN 77 FORTRAN 77:llä tämä voitaisiin toteuttaa seuraavasti: PROGRAM TAULU INTEGER N PARAMETER (N = 10) REAL X(N), B(N), R(N), A(N,N)... DO 20 I=1,N S=0.0 DO 10 J=1,N S=S+A(I,J)*X(J) 10 CONTINUE R(I)=B(I)-S 20 CONTINUE C=0 DO 30 I=1,N C=C+R(I)**2 30 CONTINUE DO 40 I=1,N X(I)=C(I)+C*R(I) 40 CONTINUE END Fortranin merkillisyyksiä on, että usempiulotteiset taulukot talletetaan pystyeikä vaakariveittäinkuten useimmissakielissä. Kaksiulotteisen taulukon ensimmäinen indeksi kertoo rivin ja jälkimmäinen sarakkeen, kuten tavallisessa matriisinotaatiossakin. Talletustavasta johtuen on tehokkaampaa kirjoittaa silmukat siten, että sisimmissä silmukoissa muutetaan taulukon ensimmäistä indeksiä eli edetään sarakkeittain. Tämän vuoksi suuret taulukot kannattaa joskus tehokkuussyistä tallettaa transponoituina.

2 Miten ratkaisen ongelmani? 19 2.6.3 C-kieli C-kielinen toteutus lineaarialgebran operaatioista olisi esimerkiksi seuraava: int n = 10; float x[n], b[n], r[n], a[n][n];... for (i=0; i<n; i++) { for(s=0.0, j=0; j<n; j++) s += a[i][j]*x[j]; x[i]=b[i]-s; } for (c=0.0, i=0; i<n; i++) c += r[i]*r[i]; for (i=0; i<n; i++) x[i] += c*r[i]; C-kielessä taulukoiden indeksit alkavat aina nollasta. Määrittely float a[10] luo taulukon, jossa on kymmenen alkiota. Kelvollisia indeksejä ovat siten 0,1,...,9. 2.6.4 Matlab Matlabin perustietotyyppejä ovat vektorit ja matriisit, joten lineaarialgebran operaatioiden suoritus on suoraviivaista. Seuraavassa käytetään dimensiota n = 10. Aluksi luodaan satunnaiset vektorit x ja b sekä matriisi A. n = 10; x = rand(n,1); b = rand(n,1); A = rand(n,n); r = b - A*x; c = r *r; x = x + c*r; Matlabissa tarkoittaa symboli * matriisikertolaskua. Toisaalta matriisi, jonka koko on 1 1, tulkitaan skalaariksi. Skalaarin ja vektorin kertolasku tehdään komponenteittain. 2.6.5 Mathematica Seuraavassa lasketaan Mathematicalla lineaarialgebran perusoperaatioita: n = 10; x = Table[Random[Real], {i,1,n}]; b = Table[Random[Real], {i,1,n}]; A = Table[Random[Real], {i,1,n}, {j,1,n}]; r = b - A. x; c = r. r; x = x + c * r;

20 Matemaattiset ohjelmistot Mathematicassa merkki. (piste) tarkoittaa siis matriisi- ja pistetuloa, vaikka varsinaista tietotyyppiä matriiseille ja vektoreille ei olekaan olemassa. 2.6.6 Maple Maplessa voi käyttää linalg-pakettia lineaarialgebran operaatioihin: with(linalg): n := 10: x := randvector(n): b := randvector(n): A := randmatrix(n,n): r := evalm(b - A &* x): c := dotprod(r,r): x := evalm(x + c*r): Sijoituslauseissa on käytetty evalm-funktiota, jotta matriisioperaatioita sisältävät lausekkeet suoritettaisiin. Matriisitulon symbolina on Maplessa &*. 2.7 Toinen käyttöesimerkki: kuvankäsittely Toisena esimerkkitehtävänä on 100 100 -kokoisen kuvadatan käsittely. Aluksi lasketaan kuvadatan keskiarvo. Lopuksi vertaillaan kunkin pikselin suuruutta keskiarvon suhteen (kynnystys). Seuraavassa toteutetaan laskenta sekä Matlabilla että Mathematicalla käyttäen sekä taulukko- että silmukkaoperaatioita. Tarkoituksena on paitsi verrata ohjelmistoja keskenään myös tutkia eri tyyppisten toteutusten vaikutusta kunkin ohjelmiston osalta. 2.7.1 Matlab Seuraavassa on annettu kuvankäsittelytehtävän Matlab-toteutus. Ensin tehdään laskenta Matlabin taulukko-operaatioiden avulla ja tämän jälkeen silmukkarakenteilla. Aluksi luodaan satunnainen 100 100 -matriisi. data = floor(256*rand(100)); Tämän jälkeen mitataan operaatioihin kuluva aika: time = cputime; ave = sum(data(:))/prod(size(data)); res = data > ave; t1 = cputime - time Matlabissa loogisia arvoja vastaavat numeroarvot 0 ja 1. Skalaarin ave ja matriisin data vertailu tehtiin edellä komponenteittain. Seuraavassa on forsilmukkarakennetta käyttävä toteutus:

2 Miten ratkaisen ongelmani? 21 time = cputime; [ni, nj] = size(data); s = 0; for i = 1:ni for j = 1:nj s = s + data(i,j); end end ave2 = s/(ni*nj); for i = 1:ni for j = 1:nj res2(i,j) = data(i,j) > ave2; end end t2 = cputime - time Tuloksiksi saadaan esimerkiksi seuraavaa: t1 = 0.0500 t2 = 4.3833 Täten taulukko-operaatioiden käyttö oli noin 90 kertaa nopeampaa kuin forsilmukoiden. Jos kuitenkin tulostaulukko res2 luodaan ennen sijoitusoperaatioita, kuluu aikaa hiukan vähemmän: time = cputime; ave3 = s/(ni*nj); res3 = zeros(size(data)); for i = 1:ni for j = 1:nj res3(i,j) = data(i,j) > ave3; end end t3 = cputime - time Ainoa ero siis on taulukon luominen zeros-funktiolla ennen sijoitusoperaatioita. Tämä koodi on noin 15% nopeampi kuin aikaisempi silmukkaversio. Taulukko-operaatioiden tehoon ei tietenkään päästä. 2.7.2 Mathematica Kuvadatan keskiarvon laskeminen voidaan tehdä Mathematicalla seuraavasti: average[l_list] := Apply[Plus,Flatten[l]] / Apply[Times,Dimensions[l]]; average2[l_list] := Block[{ni, nj, sum = 0, m}, {ni,nj} = Dimensions[l]; For[i = 1, i <= ni, i++, For[j = 1, j <= nj, j++, sum = sum + l[[i,j]]]]; m = sum/(ni*nj)]

22 Matemaattiset ohjelmistot Tässä määriteltiin kaksi rutiinia, joista ensimmäinen on toteutettu Mathematican listojenkäsittelyrutiinilla Apply ja toinen For-silmukkarakenteella. Seuraavassa esimerkki rutiinien testauksesta: data = Table[Random[Integer, {0,255}], {i,1,100}, {j,1,100}]; t1 = First[Timing[ ave = average[data] ]]; t2 = First[Timing[ ave2 = average2[data] ]]; t3 = First[Timing[ res = Outer[(# > ave)&, data] ]]; t4 = First[Timing[ res2 = Array[(data[[##]]>ave)&, Dimensions[data]] ]]; {t1, t2, t3, t4} Mathematica-lausekkeet tuottivat listarakenteet res ja res2,jotka sisältävät loogisia arvoja True ja False.Ajanmittaukseen käytettiin Timing-funktiota. Tuloksiksi saadaan esimerkiksi seuraavaa: {0.733333 Second, 10.9167 Second, 4.35 Second, 7.71667 Second} Siten silmukkarakennetta hyödyntävä laskurutiini oli noin 15 kertaa hitaampi kuin listaoperaatioita käyttävä. Tämä on tyypillistä tulkittaville kielille. Lisäksi ulkotulo-operaatiota Outer käyttävä lauseke oli Array-funktiota käyttävää nopeampi. 2.8 Prototyyppityöskentely Tehokas tapa kirjoittaa ohjelmia on kirjoittaa ensin prototyyppi jossakin interaktiivisessa ympäristössä. Testauksen jälkeen voidaan sama algoritmi toteuttaa perinteisillä ohjelmointikielillä. Siirtoa helpottaa, jos interaktiivisessa ympäristössä ja ohjelmointikielessä on käytössä samankaltaisia tietorakenteita (vertaa esim. Matlab ja Fortran 90). Prototyypin laatimiseen kannattaa käyttää interaktiivista matriisikieltä kuten Matlabia tai symbolisen laskennan ohjelmistoa kuten Mathematicaa tai Maplea. Interaktiivisessa ympäristössä voidaan nopeasti toteuttaa ja testata prototyyppiohjelmia. Tässä ympäristössä voidaan helposti tutkia erilaisten parametrien vaikutusta ohjelman suoritukseen sekä tarkastella laskentatuloksia graafisesti. Myös eri laskenta-algoritmien vertailu on helppoa. Prototyypin testaus pitää yleensä tehdä pienidimensioisilla testitapauksilla, sillä varsinainen laskenta kestää usein liian kauan näissä ympäristöissä. Interaktiivisen ympäristön laskentaa voi nopeuttaa joissakin tapauksissa optimoimalla koodia, kääntämällä koodi konekieliseksi tai käyttämällä ulkopuolisia kirjastoja. Useissa raskaissa laskentatehtävissä on ohjelman lopullinen versio kirjoitettava jollakin käännettävällä ohjelmointikielellä kenties käyttäen valmiita aliohjelmakirjastoja hyväksi. Prototyypin ohjelmakoodia voi ehkä sellaisenaan muuntaa ohjelmointikielten koodiksi. Eräät operaatiot, kuten yhtälöryhmien ratkaisu, voidaan korvata kutsulla aliohjelmakirjastoihin. Testauk-

2 Miten ratkaisen ongelmani? 23 sessa on helppo verrata prototyypin ja varsinaisen laskentaympäristön antamia tuloksia. 2.9 Eri ympäristöjen yhteiskäyttö Usein on mahdollista rakentaa tehokas ja helppokäyttöinen laskentaympäristö yhdistämällä esimerkiksi jokin matriisikieli aliohjelmakirjastoihin. Interaktiiviset laskentaympäristöt tarjoavat helppokäyttöisen käyttöliittymän raskaaseen numeeriseen laskentaan. Tulosten graafinen tarkastelu ja eri parametrien muuntelu on helppoa, kunhan käyttäjä näkee sen vaivan, että liittää oman laskentarutiininsa tällaiseen ympäristöön. Interaktiivisessa ympäristössä monen laskentarutiinin ja aliohjelmakirjaston rutiinin käyttö helpottuu, sillä aliohjelmien parametrilistoja voidaan yhdistää. Symbolisen laskennan ohjelmien käyttö helpottaa monia laskentatehtäviä. Esimerkiksi optimointialgoritmeja varten voi funktion gradientin ja Hessen matriisin muodostaa automaattisesti symbolisen laskennan ohjelmistoilla. Lisäksi lausekkeet voi tulostaa esimerkiksi Fortran- tai C-kielisinä versioina, jotka voi sijoittaa osaksi ohjelmakoodia. Eri ohjelmistojen yhteiskäytön esteenä voi monesti olla tietokoneiden käyttöympäristö, joka vaatii, että isot työt ajetaan erätöinä. Matlabiin voi liittää Fortran- ja C-kielisiä aliohjelmia käyttäen ns. MEX-tiedostoja, joilla määritellään kutsuliittymä. Esimerkiksi Matlabin matriisit siirtyvät tehokkaasti ohjelmointikieliin. Matlabiin on saatavilla myös liitäntä symbolinkäsittelyyn. Symbolic Math ja Extended Symbolic Math Toolbox liittävät Matlabin Maple-ohjelmiston laskentaytimiin. 2.10 Lisätietoja Eri ohjelmistoilla ja ohjelmointikielillä on omat käsikirjansa, jotka on esitetty seuraavassa kirjallisuusluettelossa. B.W. Char. Maple 8 Learning Guide. Waterloo Maple Inc., 2002. Walter Gander ja Jiri Hrebicek. Solving Problems in Scientific Computing Using Maple and Matlab. Springer Verlag, 1997. Juha Haataja. Optimointitehtävien ratkaiseminen. CSC, 2003. 3. uusittu painos tekeillä. Juha Haataja, Jussi Rahola ja Juha Ruokolainen. Fortran 90/95. CSC, 2001. Hannu Karttunen. Datan käsittely. CSC, 2001. 2. painos. Roman Maeder. Programming in Mathematica. Addison-Wesley, 1996.

24 Matemaattiset ohjelmistot The MathWorks, Inc. MATLAB Reference Guide, 1992. The MathWorks, Inc. MATLAB User s Guide, 1992. M. B. Monagan, K. O. Geddes, K. M. Heal, G. Labahn, S. M. Vorkoetter, J. McCarron ja P. DeMarco. Maple 8 Advanced Programming Guide. Waterloo Maple Inc., 2002. Darren Redfern. TheMaple Handbook. Hamilton Printing Company, 1996. Stephen Wolfram. The Mathematica Book. Wolfram Media, Cambridge University Press, 1996.

3 Matemaattiset sovellusohjelmistot 25 3 Matemaattiset sovellusohjelmistot 3.1 Matlab Matlab (nimi tulee sanoista matrix laboratory)onalunperin matriisien käsittelyyn tehty numeerinen ohjelmisto. Matlab on käytettävissä koneilla Cedar, Lempo ja Hiisi. Lemmolla ja Hiidellä on käytettävissä normaalin Matlabin lisäksi vain työkalupakit (toolbox) Signal Processing ja Optimization. Sen sijaan Cedarilla on saatavissa seuraavat työkalupakit (toolbox): Extended Symbolic Math, Image Processing, Mapping, Neural Network, Optimization, PDE, Signal Processing, Spline, Statistics, Symbolic Math ja Wavelet. Lisäksi Matlabin kääntäjä Matlab Compiler on saatavissa Cedarilla. Matlab käynnistyy komennolla matlab. Normaalisti päätteelle avautuu Matlab-istuntoa varten oma, kolmeen osaan jakautunut ikkuna. Varsinainen käyttö tapahtuu ikkunan oikeanpuoleisessa osassa, johon käyttäjä kirjoittaa komentonsa ja ohjelma tulostaa vastaukset. Ikkunan vasemmassa yläosassa on listattu käytössä olevien muuttujien nimet ja tyypit ja kullekin varattu muistin määrä. Vasemmassa alareunassa näkyvät aiemmin annetut komennot myös edellisesta Matlab-sessiosta. Matlabin perusteelliseen opstusjärjestelmään pääsee näpäyttämällä Matlabikkunan yläreunassa olevaa Help-sanaa tai antamalla komennon helpdesk. Tällöin käynnistyy opastusjärjestelmän selain. Jos et ole aiemmin käyttänyt Matlabia, aloita ohjelmaan tutustuminen tätä kautta. Komentoikkunassa voit saada ohjelmasta lisätietoa myös kirjoittamalla help. Tämä tapa sopii ehkä paremmin lisätietojen hankkimiseen jo tiedossasi olevista Matlabin funktioista ja operaatioista. Niinpä esimerkiksi tulostukseenkäytettävänplot-komennon erilaisistaversioistasaatietojakomennolla help plot. Ohjelmasta poistutaan komennolla quit. Mikäli Matlabin käynnistämistä haluaa nopeuttaa, niin sen voi käynnistää rvipohjaisena komennolla matlab -nojvm.tällöin javamanagerin köyttö on estetty eikä ikkunoita avata. Tämä ei estä grafiikan käyttöä. Grafiikkaikkuna avataan, kun käskyriveiltä annetaan piirroskomentoja.

26 Matemaattiset ohjelmistot Mihin Matlab soveltuu? Matlabin etuja ovat ohjelmiston sisältämä helposti opittava matriisikieli käytön interaktiivisuus ja nopeus mitä moninaisimpiin tarkoituksiin saatavat työkalupakit (toolbox) monipuolinen grafiikka siirrettävyys (Matlab on saatavissa lähes kaikille koneille) helppo laajennettavuus (M-tiedostot) ja ulkoisten Fortran- ja C-rutiinien käyttömahdollisuus. Matlabin puutteiksi voi todeta, että se osaa tehdä vain numeriikkaa eikä sisällä symbolinkäsittelyä. Matlabin käyttövinkkejä Unix-ympäristössä voi Matlabin komentoriveillä siirtyä kursorinäppäimillä ja sekä emacs-tyylisillä komennoilla ˆb ja ˆf. Aikaisemmin annettuja komentoja saa näkyviin kursorinäppäimillä ja sekä vastaavilla emacstyylisillä komennoilla ˆn ja ˆp. Voit myös kirjoittaa riville valmiiksi muutaman ensimmäisen kirjaimen komennosta, jolloin nuolinäppäimillä tapahtuva selailu tuo näkyviin vain ne aiemmat komennot, jotka alkavat samalla tavoin. Merkkejä voi poistaa näppäimillä Backspace ja Del. Näppäin ˆc keskeyttää käynnissä olevan laskennan ja näppäimellä ˆz Matlab pysähtyy ja päästään komentotulkkiin. Komennolla fg pääsee komentotulkista takaisin pysäytettyyn ohjelmaan ja Unix-komennolla jobs näkee taustalla olevat työt. Huutomerkin avulla voi Matlabissa antaa Unix-komentoja. Jos ei ole käytettävissä X-näyttöä, jolla voi pitää yhtä aikaa useita ikkunoita auki, voi ohjelmatiedostoja käydä editoimassa esimerkiksi Matlabin komennolla!emacs tiedosto. Matlab-istunnossa määriteltyjä muuttujia voi tallettaa tiedostoon tied.mat komennolla save tied var1 var2 Jos muuttujien nimet jätetään pois, talletetaan kaikki muuttujat. Komennolla who näkee, mitä muuttujia on määriteltyinä. Komennolla load tied luetaan tiedoston tied.mat sisältämät muuttujat. Taulukossa 3.1 on esitetty muutamia hyödyllisiä Matlab-ilmaisuja. Lisätietoja saa Matlabin käsikirjoista, jotka löytyvät myös Matlabin komennon helpdesk takaa.

3 Matemaattiset sovellusohjelmistot 27 Taulukko 3.1: Muutamia hyödyllisiä Matlab-lausekkeita ja komentoja. MATLAB-koodi Selitys help fun Komennon tai funktion fun avustusteksti. who Lista määritellyistä muuttujista. x = 1:n Vektori (1, 2,...,n). x = (1:n).^2 Vektori (1, 4,...,n 2 ). x = i:j:k Vektori (i, i + j,i + 2j,...,k). x = a(a > 0) Matriisin a nollaa suuremmat alkiot. x = find(v==min(v)) Vektorin v minimialkioiden sijainnit. x = y Matriisin (tai vektorin) transpoosi. a = [1 2 3; 4 5 6]; Matriisin a(i, j) muuttaminen x = a(:) vektoriksi x. a = [a; [7 8 9]] Rivin lisääminen matriisiin a. a = [a [10 11 12] ] Sarakkeen ( lisääminen ) matriisiin a. a b x = [a b; c d] Matriisi. c d x = a(:,k) Matriisin a kaikki rivit sarakkeelta k. x = a(i:j,k) Matriisin a rivit i, i + 1,...,j sarakkeelta k. x = a([1 2 3],[2 3]) Matriisin a annetut rivit annetuilta sarakkeilta. a(:,[1 3]) = [] Poistetaan matriisista a sarakkeet 1 ja 3. i = sqrt(-1); Kompleksilukujen e inπ/18,n= 0,...,35 v = exp(i*(0:35)*pi/18) määrittely. x = -3:0.1:3; y = sin(x); Funktion y = sin x, x [ 3, 3] plot(x,y, -- ) kuvaaja. x = -3:0.1:3; y = -3:0.1:3; Funktion z = xe sin(x+y) kuvaaja, [xx yy] = meshgrid(x,y); x,y [ 3, 3]. z = xx.*exp(sin(xx+yy)); contour(z) t = clock; x = ; Yksinkertainen tapa mitata laskentaan time = etime(clock,t) kuluva aika. flops(0); x = ; flops Laskennan viemien liukulukuoperaatioiden määrä.

28 Matemaattiset ohjelmistot M-tiedostot ja funktiot Usein toistuvat laskutoimitusten sarjat kannattaa tallettaa funktiotiedostoihin, joita kutsutaan eri parametreilla jos tekee kymmeniä eri versioita samasta rutiinista tulee työskentelystä nopeasti varsin kaoottista. Lisäksi funktioiden etuna on se, että niissä käytetyt muuttujat eivät vahingossakaan muuta samannimisiä Matlab-istunnossa määriteltyjä muuttujia. Yleinen, mutta pitkän päälle hankala tapa käyttää Matlabin M-tiedostoja, on sijoittaa esimerkiksi tiedostoon oma.m Matlab-komentoja, joissa asetetaan muuttujille arvot ja suoritetaan laskutoimitukset. Käytännössä kannattaa kuitenkin erottaa toisistaan parametrien arvot ja toistuvat laskutoimitukset. Voidaan kirjoittaa esimerkiksi funktiotiedosto omaf.m, jossa suoritetaan laskutoimitukset argumentteina annetulle datalle ja palautetaan halutut tulokset. Seuraavassa on esitetty tavallisen M-tiedoston ja funktiotiedoston rakenne: Komentotiedosto oma.m a = [2 1; -1-2]; b = [2 2] ;... X =... ; gamma =... ; Funktiotiedosto omaf.m function [X,gamma] = omaf(a,b,c) % Esimerkkifunktio if nargin < 3, c = 0; end... X =... ; gamma =... ; Muuttujalle c annetaan esimerkkifunktion if-lauseessa arvo 0, mikäli funktiokutsussa on annettu vain kaksi argumenttia (argumenttien lukumäärä on muuttujassa nargin). Palautettavien muuttujien lukumäärä saadaan vastaavasti muuttujasta nargout. Tätä tiedostoon omaf.m sijoitettua funktiota käytettäisiin esimerkiksi seuraavasti: [val,g] = omaf([2 1; -1-2], [2 2]) Jos halutaan ottaa talteen vain funktion omaf palauttama X, olisifunktiokutsu muotoa val = omaf([2 1; -1-2], [2 2]) Esimerkki Matlabin käytöstä ( ) 2 Piirretään Rosenbrockin funktion f(x 1,x 2 ) = 100 x 2 x1 2 + (1 x1 ) 2 kuvaaja Matlabilla. Aluksi lasketaan kuvadata 2-ulotteiseen taulukkoon z: x1 = -1.5:0.1:1.5; x2 = -3:0.1:3; [xx1 xx2] = meshgrid(x1, x2); z = 100*(xx2 - xx1.^2).^2 + (1 - xx1).^2; Seuraavaksi piirretään samaan kuvaan kaksi vierekkäistä kuvaajaa, joissa toisessa on tasa-arvokäyrät ja toisessa pintakaavio (katso kuvaa 3.1):

3 Matemaattiset sovellusohjelmistot 29 clf; subplot(1,2,1); axis([-1.5 1.5-3 3]); contour(x1,x2,z,(0:1.4:50).^3); hold on; subplot(1,2,2); surf(x1,x2,z); hold off; Lopuksi tulostetaan syntynyt kuva EPS-muodossa (Encapsulated PostScript) tiedostoon rbrock.eps: 3 print -deps rbrock.eps 2 3000 1 0 2000 1000 1 2 3 1 0 1 ( 2 Kuva 3.1: Rosenbrockin funktio f(x 1,x 2 ) = 100 x 2 x1) 2 + (1 x1 ) 2 esitettynä tasa-arvokäyrinä ja pintakaaviona Matlabin avulla. 0 5 0 5 2 0 2 Kirjallisuutta Statistics Toolbox, 1993. Spline Toolbox, 1997. Symbolic Math Toolbox, 1997. Neural Network Toolbox, 1998. Getting Started with Matlab, 2000. Mapping Toolbox, 2000. Using Matlab, 2000.

30 Matemaattiset ohjelmistot Using Matlab Graphics, 2000. Image Processing Toolbox, 2001. Thomas Coleman, Mary Ann Branch ja Andrew Grace. Optimization Toolbox For Use with MATLAB. The MathWorks, Inc, 1999. The MathWorks, Inc. MATLAB External Interface, 2000. The MathWorks, Inc. Signal Processing Toolbox User s Guide, 2000. 3.2 IDL IDL (Interactive Data Language) on hiukan vanhahtava, mutta monipuolinen datan analyysi- ja visualisointiohjelmisto. IDL (versio 4.0.1) on käytettävissä CSC:n Cedar-koneella. Lisätietoja saa komennoilla help idl ja man idl. IDL:ään kuuluvia funktioita voi tutkia hakemistosta $DOC/idl/lib. IDL käynnistyy komennolla idl. IDL:stä pääsee ulos komennolla exit. Grafiikkatyypin asetus onnistuu IDL:n sisältä komennolla set_plot.seuraavassa valitaan grafiikkatulostuksen tyypiksi X-grafiikka (isot ja pienet kirjaimet ovat samanarvoisia): IDL> set_plot, x Muita mahdollisuuksia ovat mm. tek (Tektronix) ja ps (PostScript). Ennen IDL:n käynnistämistä voi määritellä ympäristömuuttujan IDL_DEVICE, joka kertoo tulostuslaitteen tyypin. Vaihtoehtoja ovat mm. NULL (ei grafiikkaa), PS (PostScript), TEK (Tektronix) ja X (X-ikkunointi). Esimerkiksi tcshkomentotulkin komento setenv IDL_DEVICE TEK asettaa tulostusmuodoksi Tektronix-grafiikan. IDL:n sisällä saa käyttöapua kysymysmerkillä esimerkiksi seuraavasti: IDL>? IDL>?userlib IDL>?routines set_plot Komennolla help saa tietoja muuttujien määrittelyistä ja muista käynnissä olevaan istuntoon liittyvistä asioista: IDL> help, /memory heap memory in use: 50887,... IDL> help, data DATA FLOAT = Array(3, 1000)

3 Matemaattiset sovellusohjelmistot 31 Kuva 3.2: Funktion cos xy, x,y [ 3, 3] kuvaaja esitettynä pintakaaviona IDL:n avulla. Tulostaminen ja lukeminen tiedostosta IDL:llä Tulostuksen saa PostScript-muodossa tiedostoon esimerkiksi seuraavasti: IDL> set_plot, ps IDL> device, filename= kuva.ps IDL> c = 0.1*(indgen(61)-30) IDL> surface, cos(c#c), c, c, title = Esimerkki IDL> device, /close IDL> set_plot, tek Tässä piirrettiin funktion cos xy, x, y [ 3, 3] kuvaaja pintakaaviona tiedostoon kuva.ps (katso kuvaa 3.2), ja asetettiin lopuksi tulostuspäätteelle Tektronix-muodossa. Seuraavassa luetaan tekstitiedostosta input.data muodossa 2.1895919e+00 4.7044616e-01 5.7165481e+00 8.0240573e+00 esitettyä liukulukudataa 100 riviä IDL:n funktiolla readf: IDL> datasize = 100 IDL> data = fltarr(2,datasize) IDL> openr, 1, input.data IDL> readf, 1, data

32 Matemaattiset ohjelmistot IDL> close, 1 IDL> print, data 2.18959 5.71655 0.470446 8.02406 Taulukkoon data luetusta tiedosta tehdään xy-kuvaaja seuraavasti: IDL> plot, data(0,*), data(1,*), title= XY kuva IDL:n tukemat käyttöliittymäkomponentit Motif- ja Open Look-ympäristöissä toimivien IDL:n käyttöliittymäkomponenttien (widget) ikkunatyyppien, painonappien, liukusäätimien jne. käyttöä voi kokeilla seuraavaan tapaan: % idl Copyright 1989-1995, Research Systems, Inc.... IDL> demo Kirjallisuutta CSC:stä voi lainata IDL:n käsikirjoja: Research Systems, Inc. IDL Reference Guide. Research Systems, Inc. IDL Remote Procedure Calls. Research Systems, Inc. IDL User s Guide. Research Systems, Inc. IDL User s Guide, Addendum. 3.3 Matemaattiset sovellusohjelmistot Symbolisen laskennan ohjelmistot osaavat käsitellä matemaattisia lausekkeita symbolisessa muodossa. Ohjelmissa esiintyviä operaatioita ovat mm. lausekkeiden algebrallinen manipulointi: yksinkertaistaminen, tekijöihin jako, supistaminen lausekkeiden symbolinen derivointi ja integrointi yhtälöiden ja yhtälöryhmien ratkaiseminen kuvaajien piirtäminen ja grafiikka yleensä numeeriset laskut Fortran-koodin tai T E X-lausekkeiden tuottaminen

3 Matemaattiset sovellusohjelmistot 33 ohjelmointi. CSC:ssä on käytössä symbolisen laskennan ohjelmistot Mathematica, Maple ja Reduce. Ohjelmistot ovat käytettävissä taulukon 3.2 mukaisesti. Kysymysmerkki (?) on komento, joka tuottaa avustustekstin. Esimerkkejä komennoista ovat?simplify (Mathematica) tai?simplify (Maple). Taulukko 3.2: CSC:n tarjoamat symbolisen laskennan ohjelmistot. Ohjelmisto Käynnistys Koneet Opastuskomento Lopetus Mathematica math Cedar? Quit mathematica Exit Maple maple Cedar? quit xmaple Reduce reduce Cedar bye; xreduce quit; Ohjelmistojen komennot voivat jatkua usealle riville. Usein komento täytyy lopettaa tiettyyn merkkiin. Lisäksi ohjelmistoissa käytetään erikoismerkkiä, jolla estetään komennon tulostuksen näkyminen. Nämä selviävät taulukosta 3.3. Taulukko 3.3: Komentojen antaminen eri ohjelmistoille. Ohjelmisto Esimerkkikomento Tulostusta ei näytetä Mathematica Factorial[93] a = Factorial[93]; Maple 93!; a := 93!: Reduce factorial(93); a := factorial(93)$ Lisäksi ryhmäteoriasta on olemassa ohjelmistot LiE ja Cayley sekä Cayleystä edelleen kehitetty Magma, joita tosin ei ole CSC:n ohjelmistovalikoimassa. 3.4 Mathematica Mathematica on uusi ohjelmistosuosikki, joka kehittyy kohti ongelmanratkaisuympäristöä. Siinä on erittäin monipuolinen grafiikka ja kehittynyt ohjelmointiympäristö. Mathematica ei kuitenkaan aina pysty käsittelemään yhtä monimutkaisia symbolisia lausekkeita kuin Maple. Mathematica on saatavissa laajalle laitteistovalikoimalle mikroista supertietokoneisiin. CSC:ssä Mathematica on Silicon Graphics -työasemassa Cedar. Mathematica käynnistyy komennolla math tai X-ikkunointia käytettäessä komennolla mathematica. Mathematican X-käyttöliittymän mahdollisuuksista löytyy esimerkki kuvasta 3.3.

34 Matemaattiset ohjelmistot Sivulla 40 on verrattu symbolisen laskennan ohjelmistoja keskenään. Seuraavassa on lyhyt esimerkki Mathematica-istunnosta Cedarissa : % math Mathematica 3.0 for Silicon Graphics Copyright 1988-97 Wolfram Research, Inc. -- Motif graphics initialized -- In[1]:= pict = Plot3D[x*Exp[Sin[x+y]], {x, -Pi, Pi}, {y, -Pi, Pi}, PlotPoints -> 40, PlotLabel -> "x*exp[sin[x+y]]", BoxRatios -> {1, 1, 0.8}, Shading -> False] Out[1]= -SurfaceGraphics- Tässä siis käytettiin Mathematican tekstipohjaista käyttöliittymää. Lausekkeiden syöttö tapahtuu kehotteen In jälkeen, jolloin tulostus on nähtävissä kehoitteen Out jälkeen. X-ikkunointijärjestelmää käyttävässä Mathematican versiossa syötteet kirjoitetaan tyhjälle laskenta-arkille. Ne lähetetään suoritukseen painamalla yhtä aikaa Shift -ja Return -näppäimiä. x*exp[sin[x+y]] 2 0-2 5 0-5 -2 0 2 Kuva 3.3: Esimerkki Mathematicalla tuotetusta grafiikasta. Kuvassa on esitetty pintakaaviona funktio xe sin x+y, x,y [ π,π].

3 Matemaattiset sovellusohjelmistot 35 Kuva 3.4: Mathematican X-käyttöliittymän käyttöesimerkki.

36 Matemaattiset ohjelmistot Kirjallisuutta Seuraavassa on lueteltu muutamia monista Mathematica-ohjelmistoa kuvaavista teoksista: Roman Maeder. Programming in Mathematica. Addison-Wesley, 1996. Stephen Wolfram. The Mathematica Book. Wolfram Media, Cambridge University Press, 1996. Mathematican käyttäjän oppaat (The Mathematica Book ja Standard Add-on Packages) tulevatmyösmathematican mikroversioiden mukana. Ohjelmistoon liittyviä uutisia ja käyttövinkkejä esitellään lehdessä The Mathematica Journal. 3.5 Maple Maple on Mathematican kilpailija, mutta sillä on hieman vaatimattomammat tavoitteet. Maple on vahva monimutkaisissa symbolinkäsittelytehtävissä. Se sisältää monipuoliset grafiikkaominaisuudet ja on saatavissa usealle eri tietokonetyypille mikrosta supertietokoneisiin. Maple käynnistyy Cedarilla komennoilla maple ja xmaple (X-ikkunointia käyttävä versio). Kuvan 3.5 esimerkki-istunnossa näkyy komennolla xmaple käynnistyvä X- pohjainen käyttöliittymä avustusikkunoineen. Vanhoja lausekkeita voi editoida ja kopioida paikasta toiseen. Painamalla Return -näppäintä suoritetaan kyseisen rivin komennot. Kysymysmerkillä pyydetyt avustustekstit tulevat omiin ikkunoihinsa. Kirjallisuutta Maplen dokumentaatio koostuu teoksista: Walter Gander ja Jiri Hrebicek. Solving Problems in Scientific Computing Using Maple and Matlab. Springer Verlag, 1997. Andre Heck. Introduction to Maple. Springer, 2003. Third edition. M. B. Monagan, K. O. Geddes, K. M. Heal, G. Labahn, S. M. Vorkoetter, J. McCarron ja P. DeMarco. Maple 8 Advanced Programming Guide. Waterloo Maple Inc., 2002. M. B. Monagan, K. O. Geddes, K. M. Heal, G. Labahn, S. M. Vorkoetter, J. McCarron ja P. DeMarco. Maple 8 Introductory Programming Guide. Waterloo Maple Inc., 2002. Darren Redfern. TheMaple Handbook. Hamilton Printing Company, 1996.

3 Matemaattiset sovellusohjelmistot 37 Kuva 3.5: Maplen X-ikkunointiin pohjautuva käyttöliittymä. Tekstiä voi kopioida ikkunasta toiseen käyttämällä hiirtä. Vanhoja lausekkeita voi editoida ja muuttaa sekä syöttää uudelleen laskettaviksi painamalla Return -näppäintä. 3.6 Reduce Reduce on vanha ohjelmisto, jonka perusominaisuudet eivät ole kovin laajat, mutta jolle on kirjoitettu paljon lisäpaketteja. Reduce on käytettävissä Cedarilla Reducesta on olemassa L A T E X-muotoinen käyttöopas, joka on Cedarilla hakemistossa $DOC/reducedoc. Kirjallisuutta Anthony C. Hearn. REDUCE User s and Contributed Packages Manual 3.7. Konrad-Zuse-Zentrum, Berlin, 1999. Winfried Neun. REDUCE User s Guide for the Unix Systems, Version 3.7. Konrad-Zuse-Zentrum, Berlin, 1999.

38 Matemaattiset ohjelmistot Graafisten kuvaajien tuottaminen symbolisen laskennan ohjelmis- Taulukko 3.4: toilla. Ohjelmisto Komento Pistejoukon kuvaaja: Mathematica ListPlot[{0,2,4,3,5,1}, PlotJoined->True] Maple plot([[1,0],[2,2],[3,4],[4,3],[5,5],[6,1]]); Funktion kuvaaja: Mathematica Plot[Sin[x],{x,0,2Pi}] Maple plot(sin(x)), x=0..2*pi); Kahden muuttujan funktion kuvaaja: Mathematica Plot3D[Sin[x]*Cos[y], {x,0,8},{y,0,8}] Maple plot3d(sin(x)*cos(y), x=0..8, y=0..8); Parametrinen tasokäyrä: Mathematica ParametricPlot[{t*Sin[t],t*Cos[t]},{t,0,8Pi}] Maple plot([t*sin(t),t*cos(t),t=0..8*pi]); Parametrinen pinta tai avaruuskäyrä: Mathematica ParametricPlot3D[{Exp[-2*u]*Sin[t], Exp[-u]*Cos[t],u},{t,0,2Pi},{u,0,1}] Maple plot3d([exp(-2*u)*sin(t),exp(-u)*cos(t),u], t=0..2*pi, u=0..1); Tasa-arvokäyrä: Mathematica ContourPlot[Sin[x] Cos[y], {x,0,8}, {y,0,8}] Maple with(plots): contourplot(son(x=*cos(y),x=0..8,y=0..8); 3.7 Graafiset kuvaajat Symbolisen laskennan ohjelmistoista Mathematicalla ja Maplella on laajat grafiikkaominaisuudet. Grafiikan syvällisempi käsittely vaatisi oman oppaansa, joten seuraavassa on esitetty vain esimerkkejä tärkeimmistä piirtokomennoista eri ohjelmistoissa. Graafisten kuvaajien ulkonäköä voi usein muuttaa mieleisekseen antamalla komennon yhteydessä lisäparametreja, joista tarkemmin kunkin ohjemiston käsikirjassa. Kuvan 3.6 esimerkkikuvaajat on tehty Mathematicalla. Komennot löytyvät taulukosta 3.4. Mathematicassa viimeisimmällä komennolla tehdyn kuvan voi tallentaa Encapsulated PostScript -muodossa komennolla Display["kuva.eps",%,"EPS"] Muita mahdollisia tiedostoformaatteja ovat mm. TIFF, GIF ja PDF. Maplea käytettäessä pitää valita tulostuskanava ennen piirtokomennon antamista. Komento