Matlab- ja Maple- ohjelmointi

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

Zeon PDF Driver Trial

Harjoitus 4 -- Ratkaisut

Numeerinen analyysi Harjoitus 3 / Kevät 2017

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

Makrojen mystinen maailma lyhyt oppimäärä

Ohjelmoinnin perusteet Y Python

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

DIFFERENTIAALI- JA INTEGRAALILASKENTA

1 Kannat ja kannanvaihto

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

Ohjelmoinnin perusteet Y Python

8. Yhtälöiden ratkaisuja Newtonilla, animaatioita

ELEC-C5210 Satunnaisprosessit tietoliikenteessä Harjoitus M1,

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

Harjoitus 10: Mathematica

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

Lineaarialgebra ja matriisilaskenta I

13. Hyvä ohjelmointitapa (osa 1) 13.1

Matlabin perusteita Grafiikka

4. Lausekielinen ohjelmointi 4.1

Valitse ruudun yläosassa oleva painike Download Scilab.

Differentiaaliyhtälöryhmä

Numeeriset menetelmät

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

Octave-opas. Mikä on Octave ja miksi? Asennus

14. Hyvä ohjelmointitapa 14.1

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

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

Matematiikan tukikurssi

Luento 5. Timo Savola. 28. huhtikuuta 2006

Yhteenlaskun ja skalaarilla kertomisen ominaisuuksia

Matriiseista. Emmi Koljonen

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Java-kielen perusteet

Muuttujan sisällön näet kirjoittamalla sen nimen ilman puolipistettä

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Tietotekniikan valintakoe

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

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2

Matematiikan tukikurssi, kurssikerta 3

12. Javan toistorakenteet 12.1

811120P Diskreetit rakenteet

Lyhyt kertaus osoittimista

Toinen harjoitustyö. ASCII-grafiikkaa 2017

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

ABTEKNILLINEN KORKEAKOULU

Ohjelmoinnin perusteet Y Python

Matemaattiset ohjelmistot 1-2 ov, 2-3 op

Kon Konepajojen tuotannonohjaus: ILOG CPLEX Studion käyttö

Ohjelmoinnin perusteet Y Python

MITÄ JAVASCRIPT ON?...3

Ratkaisuehdotukset LH 7 / vko 47

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

Harjoitus 1 -- Ratkaisut

Mat-1.C Matemaattiset ohjelmistot

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

3. Muuttujat ja operaatiot 3.1

8 KANNAT JA ORTOGONAALISUUS. 8.1 Lineaarinen riippumattomuus. Vaasan yliopiston julkaisuja 151

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

811120P Diskreetit rakenteet

Lineaarialgebra ja matriisilaskenta I

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

1 Rajoittamaton optimointi

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Harjoitus 3 -- Ratkaisut

T Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet

12. Javan toistorakenteet 12.1

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

1. Mitä tehdään ensiksi?

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

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

Harjoitus 2 -- Ratkaisut

Muuttujien määrittely

Java-kielen perusteet

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Kaikkien paikallisten ääriarvojen haku

Harjoitustyö: virtuaalikone

2.8. Kannanvaihto R n :ssä

FUNKTION KUVAAJAN PIIRTÄMINEN

Kanta ja Kannan-vaihto

Ortogonaalinen ja ortonormaali kanta

= 2 L L. f (x)dx. coshx dx = 1 L. sinhx nπ. sin. sin L + 2 L. a n. L 2 + n 2 cos. tehdään approksimoinnissa virhe, jota voidaan arvioida integraalin

Tieteellinen laskenta 2 Törmäykset

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

Ohjelmoinnin perusteet Y Python

Harjoitus 2 -- Ratkaisut

Matemaattiset ohjelmistot A. Osa 2: MATLAB

1 Lineaariavaruus eli Vektoriavaruus

Transkriptio:

Perusasioita 2. helmikuuta 2005 Matlab- ja Maple- ohjelmointi Yleistä losoaa ja erityisesti Numsym05-kurssin tarpeita palvellee parhaiten, jos esitän asian rinnakkain Maple:n ja Matlab:n kannalta. Ohjelmien kirjoittaminen merkitsee systeemin laajentamista omilla funktioilla, jotka periaatteessa toimivat aivan kuten systeemin (Maple,Matlab, ym.) omat funktiot. Sekä Maple että Matlab sisältävät suuren määrän kirjastofunktioita, joiden koodi on avointa. Hyvä tapa saada ohjelmointioppia on tutkia ohjelman valmistajan omia koodeja. Sitä ennen kannattaa harjoitella lukemaan ja kirjoitamaan helppoja ja riisuttuja muutaman rivin funktioita. Tässä samaistamme termit ohjelma, proseduuri ja funktio. Sekä Maple että Matlab ovat funktionaalisia ohjelmointikieliä, eli yleensä ohjelmat ovat funktioita. No, asiaan: Maple Olemme jo harrastaneet ohjelmointia kirjoittaessamme funktiomäärityksiä. Tyyppiä f:=x->x^2 olevat määritykset ovat jo tuttuja. > type(f,procedure); true Toden totta, kirjoitimme jo ohjelman. Vastaavasti voidaan määritellä useamman muuttujan funktio vaikkapa f(x, y, z) = x 2 + y 2 + z 2 näin > F:=(x,y,z)->x^2+y^2+z^2; Jos halutaan lokaaleja muuttujia ja yleensä laajempaa koodimäärää, kirjoitetaan määrittely käyttäen proc-syntaksia. Edellä oleva F voitaisiin määritellä tätä pitempää syntaksia käyttäen näin: > F:=proc(x,y,z) x^2+y^2+z^2 Tällaisessa proc-määrittelyssä palautetaan tuloksena viimeiseksi suoritetun komennon tulos (ellei RETURNlauseella toisin määrätä). Käytännön neuvo: Kun kirjoitat koodirivejä Maple- työarkille, käytä SHIFT-ENTER- yhdistelmää rivinvaihdoissa! Proseduuri on Maple-objekti siinä, missä yksinkertainen muuttuja, lista, matriisi jne. Se siis sijoitetaan arvoksi jollekin symbolille, jos sitä halutaan nimellä kutsua. Proseduurin yleinen muoto on tällainen proc(argjono) local muuttujajono1; global muuttujajono2; options muuttujajono3; 1

2 komento_1; komento_2;... komento_n Sanoilla local, global ja options alkavat rivit eivät ole pakollisia. Viimeiseksi laskettu tulos on se, jonka proseduuri palauttaa, ellei RETURN- lauseella toisin määrätä. Kaikki lauseet päätetään puolipisteeseen, paitsi viimeinen, end-sanaa edeltävä (siihenkin saa laittaa puolipisteen). Loppumerkkinä on normaaliin tapaan puolipiste tai kaksoispiste. Matlab Sama Matlab:llä: 1) ns. inline-määrittely tehdään Matlab-istunnossa: >> F=inline('x^2+y^2+z^2','x','y','z') F = Inline function: F(x,y,z) = x^2+y^2+z^2 >> F(1,2,3) 14 Matlab:ssa Maple:n proc:ia vastaava funktiomääritys kirjoitetaan suoraan teksititedostoon, ei siis Matlab-istuntoon. Tiedosto on tyyppiä.m ja sen tulee sijaita joko oletushakemistossa (jonne voidaan siirtyä Matlab:n sisällä -komennolla cd). Yleispätevämpi tapa on käyttää addpath-komentoa, jolla Matlab:n hakupolkuun lisätään kyseinen hakemisto. Tehdäänpä tuo yllä sanottu nyt tällä tyylillä: Tiedostoon F.m kirjoitetaan jollain tekstieditorilla (luontevimmin Matlab:n omalla editorilla) rivit: function w=f(x,y,z) w=x^2+y^2+z^2; Tässä on vastaava Matlab-istunto: >> pwd /mnt/kiekko/home/apiola >> addpath opetus/materiaali03/maple >> F(1,2,3) 14

3 Peruserot: Maple:n proc:ssa ei tarvitse sijoittaa funktion palauttamaa arvoa millekään muuttujalle. (Haluttaessa sen voi tehdä, jolloin kyseinen muuttuja kirjoitetaan local-sanan perään paikallisten muuttujien jonoon. Matlab:n funktiomääritys alkaa aina varatulla sanalla function, jonka jälkeen kirjoitetaan otsikkoriville paluumuuttujan nimi (esimerkissa w. Se on vapaasti valittavissa (ei tietenkään saa olla sama kuin jokin argumenttilistan jäsen). Viimeiseksi tälle muuttujalle sijoitettu arvo on se, jonka funktio palauttaa. Vastaavasti kuin Matlab:ssä, Maple-proseduurit kannattaa kirjoittaa tekstitiedostoon, kun niitä alkaa kertyä. Niiden hakeminen eri työarkeilta käy pian tuskalliseksi. Toisin kuin Matlab:ssä, Maplefunktiot kannattaa koota samaan tekstitiedostoon, joka luetaan Maple:een tarvittaessa. Esim: tiedosto omatohjelmat.mpl # Tiedosto omatohjelmat.m 1.2.2005 # Tänne alan kerätä omia hengentuotteitani. # Aloitetaan vaikka tällä: minmax:=proc(lista) #Haetaan listan pienin ja suurin alkio, palautetaan # tulos listana muodossa [m,m] local jono; jono:=op(lista); [min(jono),max(jono)]; Maple-istunto Luetaan nyt äskeinen tiedosto Maple:en ja kokeillaan siinä olevan (toistaiseksi ainoan) funktion toimintaa. > read("/home/apiola/opetus/materiaali03/maple/omatohjelmat.mpl"); > print(minmax); proc(lista) local jono; jono := op(lista); [min(jono), max(jono)] end proc > minmax([seq(i,i=-10..10)]); [-10, 10] > minmax([seq(sin(i),i=-10..10)]); [-sin(8), sin(8)] 1. Ohjauslauseita Tulkkaavassa järjestelmässä, kuten molemmat Maple ja Matlab voidaan käyttää ohjauslauseita suoraan istunnossa, tarvitsematta aina kirjoittaa funktioita. for do end do- rakenteen yleinen muoto on

4 for <name> from <expr> by <expr> to <expr> while <expr> do <statement sequence> end do; tai for <name> in <expr> while <expr> do <statement sequence> end do; Näissä kunkin pystyviivaparin rajaama osa on valinnainen. Esimerkiksi for i to 10 do a[i]:=x^i end do; tarkoittaa, että käytetään oletusarvoja from 1 by 1 ja jätetään while-osa pois. Huomaa do <statement sequence> end do;, missä voidaan ajatella, että do on alkusulku ja end do loppusulku. Vastaava pari on if end if. Esim. Tsebyshevin polynomit voidaan määritellä rekursiokaavalla T 0 (x) = 1, T 1 (x) = x, T n = 2xT n 1 (x) T n 2 (x) Tehtävänä on määritellä proseduuri näiden laskemiseksi. Huomautamme aluksi, että laskenta voidaan tehdä suoraan interaktiivisesti tähän tapaan: > t0:=1;t1:=x;n:=5: > for i from 2 to n do tn:=expand(2*x*t1-t0);t0:=t1;t1:=tn;end do; > i; # katsotaan i:n arvo for-silmukan jälkeen. Interaktiivisessa käytössä for do end do rakenteella on indeksimuuttujaan liittyvä sivuvaikutus, se jää arvoon yläraja + 1 Proseduuriksi kirjoitettuna toteutus voisi olla tällainen. T:=proc(n::integer,x) local t0,t1,tn,i; t0:=1;t1:=x; for i from 2 to n do tn:=expand(2*x*t1-t0); t0:=t1;t1:=tn; end do; tn; # Tämä palautetaan tuloksena. Nyt voidaan kutsua vaikkapa T(5,x); Lisäsimme parametrille n tyyppitarkistuksen. Siten esimerkiksi kutsu T(x,5); tai T(a,10); antaa asianmukaisen virheilmoituksen. Koska silmukkaindeksi i on määritelty lokaaliksi, proseduurin kutsu ei muuta sen arvoa. Tätä voi kokeilla vaikka näin > i:='i':t(7,z);i; Sama Matlab:lla Matlab:llä ei voida tehdä symbolista. Tehdään nyt oikean tyylinen toteutus. Alkukommenteissa näkyy funktion toiminta. Matlab on siitä(kin) hyvä, että alkukommentit tulevat näkyvin tässä tapauksessa komennolla help tseb.

Tyypillisesti Matlab-funktio rakennetaan toimimaan vektoriargumentilla. Kun lasketaan useiden polynomian arvoja annetun x-vektorin pisteissä, on luonnollista palauttaa tulos matriisina, jonka sarakkeen pituus on x ja kunkin sarakkeen arvot ovat ao. asteisen polynoin arvoja x-vektorin pisteissä. Tässä muodossa tulos voidaan samalla antaa heti plot:lle. function Y=tseb(x,n) % tseb Tsebychevin poynomit % Y=tseb(X,n) laskee n ensimmäistä Tseb-polynomia % vektorin x pisteissä. % Tulosmatriisin Y k:s sarake antaa astetta k-1 olevan Teseb- % polynomin arvot. 5 Y=ones(length(x),n); % Ykkösmatriisi, n saraketta. x=x(:); % Varmsietaan, että x on sarakevektori. if n==1, return, end % Pelkkä 1. Tseb. pol =1. Y(:,2)=x; for k=3:n Y(:,k)=2*x.*Y(:,k-1)-Y(:,k-2); end Tähän loppui funktion koodi. Huomaa, että end ei ole funktion loppusana, vaan se kuuluu for-silmukkaan. (Funktiolla ei ole mitään lopputervehdystä.) Nyt sitten innolla kustumaan: >> help tseb tseb Tsebychevin poynomit Y=tseb(X,n) laskee n ensimmäistä Tseb-polynomia vektorin x pisteissä. Tulosmatriisin Y k:s sarake antaa astetta k-1 olevan Tesebpolynomin arvot. >> x=linspace(-1,1); >> Y=tseb(x,4); >> plot(x,y) Matriisin Y (100 4) sarakkeina ovat nyt asteita 0, 1, 2, 3 olevien Tseb-polynomien arvot x-vektorin pisteissä. Sekä Maple- että Matlab- ratkaisut ovat omalla tavallaan tyylikkäitä. Maple:lla voidaan suorittaa symbolisesti polynomien käsittelyä. Matlab:llä taas saadaan numeeriset arvot tehokkaasti käyttöön, ja numeerinen jatkokäsittely on äärimmäisen helppoa ja tehokasta.