Harjoitus 2: Ohjelmointi (Matlab)

Samankaltaiset tiedostot
Harjoitus 2: Ohjelmointi (Matlab)

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

Harjoitus 3: Matlab - Matemaattinen mallintaminen

Harjoitus 4: Differentiaaliyhtälöt (Matlab) MS-C2107 Sovelletun matematiikan tietokonetyöt 1

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

Ohjelmoinnin peruskurssi Y1

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

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

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

Ohjelmoinnin perusteet Y Python

Zeon PDF Driver Trial

ITKP102 Ohjelmointi 1 (6 op)

11. Javan toistorakenteet 11.1

Luento 5. Timo Savola. 28. huhtikuuta 2006

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

12. Javan toistorakenteet 12.1

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet

Algoritmit 1. Demot Timo Männikkö

Python-ohjelmointi Harjoitus 2

Ohjelmoinnin perusteet Y Python

Kokonaislukuaritmetiikka vs. logiikkaluupit

Matlabin perusteita Grafiikka

SCI-C0200 Fysiikan ja matematiikan menetelmien studio

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

12. Javan toistorakenteet 12.1

Java-kielen perusteita

Java-kielen perusteita

Harjoitus 10: Mathematica

Ohjelmoinnin perusteet Y Python

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

Ehto- ja toistolauseet

Ohjelmoinnin perusteet Y Python

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 7: Pienimmän neliösumman menetelmä ja Newtonin menetelmä.

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

ITKP102 Ohjelmointi 1 (6 op)

Muistutus aikatauluista

3.1 Lineaarikuvaukset. MS-A0004/A0006 Matriisilaskenta. 3.1 Lineaarikuvaukset. 3.1 Lineaarikuvaukset

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Määritelmä Olkoon T i L (V i, W i ), 1 i m. Yksikäsitteisen lineaarikuvauksen h L (V 1 V 2 V m, W 1 W 2 W m )

16. Ohjelmoinnin tekniikkaa 16.1

Ohjelmointiharjoituksia Arduino-ympäristössä

Numeerinen analyysi Harjoitus 3 / Kevät 2017

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Ohjelmoinnin perusteet Y Python

Tieteellinen laskenta 2 Törmäykset

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Ratkaisuehdotukset LH 7 / vko 47

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

5/20: Algoritmirakenteita III

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

3. Muuttujat ja operaatiot 3.1

FUNKTION KUVAAJAN PIIRTÄMINEN

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Matlab- ja Maple- ohjelmointi

Harjoitus 7 -- Ratkaisut

Harjoitus 4 -- Ratkaisut

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

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Ohjelmoinnin perusteet Y Python

Valitse ruudun yläosassa oleva painike Download Scilab.

Matematiikan tukikurssi, kurssikerta 1

Ohjelmoinnin perusteet Y Python

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

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

Harjoitus 3 -- Ratkaisut

16. Ohjelmoinnin tekniikkaa 16.1

Oletetaan ensin, että tangenttitaso on olemassa. Nyt pinnalla S on koordinaattiesitys ψ, jolle pätee että kaikilla x V U

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne

Matemaattiset ohjelmistot 1-2 ov, 2-3 op

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

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

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

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

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Harjoitus 6: Symbolinen laskenta II (Mathematica)

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

Luento 4: Liikkeen kuvausta, differentiaaliyhtälöt

ax + y + 2z = 0 2x + y + az = b 2. Kuvassa alla on esitetty nesteen virtaus eräässä putkistossa.

Python-ohjelmointi Harjoitus 5

Säätötekniikan matematiikan verkkokurssi, Matlab tehtäviä ja vastauksia

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Transkriptio:

Harjoitus 2: Ohjelmointi (Matlab) MS-C2107 Sovelletun matematiikan tietokonetyöt MS-C2107 Sovelletun matematiikan tietokonetyöt 1

2. Harjoituskerta Aiheet: - Matlabin kontrollirakenteet - Funktiot ja komentojonotiedostot Matlabissa Osaamistavoitteet: - Osaat laatia omia funktioita ja komentojonotiedostoja - Hallitset tavallisimpien kontrollirakenteiden käyttämisen MS-C2107 Sovelletun matematiikan tietokonetyöt 2

Relaatio- ja loogiset-operaattorit Matlabissa < Pienempi kuin <= Pienempi tai yhtä suuri kuin > Suurempi kuin >= Suurempi tai yhtä suuri kuin == Yhtä suuri kuin ~= Eri suuri kuin && Palauttaa arvon true jos molemmat tarkasteltavat lausekkeet saavat arvon true, muussa tapauksessa palauttaa arvon false. Palauttaa arvon true jos jompikumpi inputeista (tai molemmat) saavat arvon true, muussa tapauksessa palautetaan false. Huom! = on sijoitusoperaattori ks. viime luento). MS-C2107 Sovelletun matematiikan tietokonetyöt 3

Ohjelman kontrollirakenteet - if, else, elseif Haarautuminen: Ohjelmakoodissa voidaan edetä eri tavoin riippuen ohjelman tilasta. - if, else, elseif if (x < 0) disp( luku x on negatiivinen ) elseif (x > 0) disp( luku x on positiivinen ) else disp( luku x on nolla ) end Huom! if aloittaa ehtolausekkeen ja end lopettaa - elseif ja else ovat optionaalisia MS-C2107 Sovelletun matematiikan tietokonetyöt 4

Ohjelman kontrollirakenteet - for Silmukoiden avulla joukko komentoja voidaan ajaa useamman kerran peräkkäin. for - silmukka - Käytetään kun silmukan toistojen lukumäärä on ennaltamäärätty. - Esim. Käydään läpi kaikki matriisin rivit. for muuttuja = alkuarvo : askelpituus : loppuarvo end % Suorita komentoja MS-C2107 Sovelletun matematiikan tietokonetyöt 5

Esimerkki silmukasta Tehdään ohjelma, joka tulostaa joka kierroksella indeksin i toisen potenssin. for i=1:2:7 end i^2 ans = 1 ans = 9 ans = 25 ans = 49 MS-C2107 Sovelletun matematiikan tietokonetyöt 6

Ohjelman kontrollirakenteet - while while - silmukka - Käytetään kun toistojen lukumäärä ei ole ennaltamäärätty. - Esim. Haetaan ratkaisua iteratiivisesti kunnes tietty toleranssiehto täyttyy. x=0; while (cos(x) > 0) x=x+0.1; end x x = 1.6000 MS-C2107 Sovelletun matematiikan tietokonetyöt 7

continue, break, return Silmukoissa käytettäviä komentoja: - continue: Siirrytään silmukan alkuun seuraavalle iteraatiokierrokselle. - break: Siirrytään ulos silmukasta. - return: Lopetetaan koodin suoritus. for x=0:0.1:pi if (cos(x)<=0) break; end end x x = 1.6000 MS-C2107 Sovelletun matematiikan tietokonetyöt 8

Silmukoita ei aina tarvitse käyttää... Matlab on sunniteltu vektori- ja matriisioperaatioita varten. Vektorisointi: for ja while -silmukoiden korvaaminen vektori- tai matriisioperaatioilla. - Yleensä laskennallisesti tehokkaampaa kuin silmukoiden käyttäminen. % Sinifunktion arvojen % laskenta for-silmukassa % Vastaava operaatio % vektorimuodossa i = 0; for t = 0:.01:10 i = i + 1; y(i) = sin(t); end t = 0:.01:10; y = sin(t); MS-C2107 Sovelletun matematiikan tietokonetyöt 9

Funktiot m-tiedosto voi sisältää komentojonon sijasta Funktion Funktio ottaa sisään argumentteja ja palauttaa arvoja. Funktio tallentaa käyttämänsä muuttujat omaan sisäiseen työtilaan: - Matlabin työtilassa olevia muuttujia ei voida suoraan käyttää funktion sisällä. - Funktion sisäisiä muuttujia ei voida käyttää sen ulkopuolella. MS-C2107 Sovelletun matematiikan tietokonetyöt 10

Funktioiden syntaksi function [x, y] = minunfunktio(a, b, c) % Funktion määrittelyrivi x = a*b+c; % Funktion toteutus y = x.^2 Yo. esimerkissä: - minunfunktio : funktion nimi. - a, b, c : funktion input-argumentit. - x, y : funktion palauttamat arvot. - Funktio tallennetaan saman nimiseen m-tiedostoon. - Esim. funktio minunfunktio() tallennettaisiin tiedostoon minunfunktio.m. - Funktion 1. rivi alkaa avainsanalla function: Kertoo Matlabille, että tiedosto on funktio eikä komentojonotiedosto. MS-C2107 Sovelletun matematiikan tietokonetyöt 11

Ohjelman kehittäminen Monesti ongelma kannattaa pilkkoa itsenäisiin osiin. - Oma funktio erikseen eri osille. Pseudo-koodi-luonnos ennen varsinaista koodia. - Pääpaino ohjelman rakenteessa eikä syntaksissa. - Helppo muuttaa tämän jälkeen varsinaiseksi ohjelmaksi. Ohjelmointityyli - Käytä selkeitä funktioiden ja muuttujien nimiä. - Kommentoi koodiasi. - Käytä sisennyksiä ja tyhjää tilaa. Virheiden etsintä selkeästä koodista on helpompaa. MS-C2107 Sovelletun matematiikan tietokonetyöt 12

Tehtävä A: Asiakasdatan käyttö Tehtävässä harjoitellaan for-loopin ja loogisten operaattoreiden käyttöä. Käytössäsi on dataa 10000:n henkilön terveystiedoista. Tehtävänäsi on etsiä datasta tietty ihmisryhmä, joka tulee kutsua tarkastukseen. Lataa kurssin Moodle-sivuilta tiedosto asiakasdata.mat, vie se Matlab-kansioosi ja tallenna se Matlabin työtilaan. Matriisin sarakkeista löytyy henkilön sukupuoli (1=nainen, 0=mies), syntymävuosi (1940-2000), edellinen tarkastuskäynti sekä geneettisten riskitekijöiden gen1 (asteikko 0-7), gen2 (asteikko 0-5) ja gen3 (asteikko 0-10) lukuarvot. Mitä tietoja kultakin sarakkeelta löytyy? Vinkki: Voit katsoa matriisin A sarakkeen i maksimiarvon komennolla max(a(:,i)). MS-C2107 Sovelletun matematiikan tietokonetyöt 13

Tehtävä A: Asiakasdatan käyttö Etsi asiakasdatasta niitä potilaita vastaavien rivien indeksit, joilla täyttyvät seuraavat ehdot: Nainen, ennen 1970 syntynyt, gen1 yli 5 ja gen2 yli 3 ja viimeisin tarkastus ennen vuotta 2010. Voit tehdä tämän esimerkiksi käyttäen for-silmukkaa, if-kontrollirakennetta ja kalvoissa aiemmin mainittuja loogisia- ja vertailuoperaattoreita. Kuinka monta nämä ehdot täyttävää asiakasta löydät? MS-C2107 Sovelletun matematiikan tietokonetyöt 14

Tehtävä B: Alkulukupalautin Kirjoita oma Matlab-funktio, joka ottaa argumentikseen luonnollisen luvun N ja palauttaa pienimmän alkuluvun, joka on suurempi kuin N. Esimerkiksi, jos N = 80, niin funktio palauttaa alkuluvun 83. Jos luku N on alkuluku, funktio palauttaa sen. (Voit olettaa, että syöte on positiivinen kokonaisluku.) Ohje: 1. Aloita funktiotiedosto näin: function alkuluku = omafunktio(n). Muuttuja alkuluku on funktion palauttama alkuluku. Funktiota kutsutaan Matlabin komentoriviltä kirjoittamalla esim. omafunktio(80), jossa siis N:lle on annettu arvo 80. MS-C2107 Sovelletun matematiikan tietokonetyöt 15

Tehtävä B: Alkulukupalautin 2. Matlabin funktiolla isprime voit tarkistaa onko luku alkuluku. Jos tarkastettu luku ei ole alkuluku, niin kasvatata sen arvoa yhdellä kunnes löydät seuraavan alkuluvun. Käytä ohjelmasi toteutuksessa while-toistorakennetta. Mikä on opiskelijanumerostasi (ilman kirjainta) seuraava alkuluku? MS-C2107 Sovelletun matematiikan tietokonetyöt 16

Tehtävä C: Infektiomalli Tarkastellaan infektion leviämistä kuvaavaa SIR-mallia. Populaatio voidaan jakaa kolmeen ryhmään: alttiit s(t) (s=susceptible), infektoituneet i(t) (i=infected) ja toipuneet r(t) (r=recovered). Ryhmien kokojen muutoksia voidaan kuvata seuraavasti: Δs(t) = α i(t) s(t) Δi(t) = α i(t) s(t) β i(t) Δr(t) = β i(t) MS-C2107 Sovelletun matematiikan tietokonetyöt 17

Tehtävä C: Infektiomalli Ryhmien koot ajanhetkellä t + 1 saadaan laskettua seuraavilla differenssiyhtälöillä: s(t + 1) = s(t) + Δs(t) i(t + 1) = i(t) + Δi(t) r(t + 1) = r(t) + Δr(t) Alussa tuhannen ihmisen populaatiossa on ainoastaan yksi infektoitunut ja muut ovat alttiita: s(1) = 999 i(1) = 1 r(1) = 0. MS-C2107 Sovelletun matematiikan tietokonetyöt 18

Tehtävä C: Infektiomalli 1. Mallinna infektion leviämistä parametreilla α = 0.0011 ja β = 0.03. Vihje: kirjoita malli m-tiedostoon käyttäen silmukkarakennetta for t=1:100. Laske ryhmien koot kullakin ajanhetkellä yllä annetuista differenssiyhtälöistä. Millä ajanhetkellä infektoituneiden lukumäärä saavuttaa maksiminsa, ja mikä on lukumäärä silloin? Vihje: Selvitä komentoa help max käyttäen, kuinka saat vektorin d suurimman alkion ja sen indeksin. MS-C2107 Sovelletun matematiikan tietokonetyöt 19

Tehtävä C: Infektiomalli 2. Infektion huomataan olevan tappava. Lisää malliin kuolleiden ryhmä d(t) (d=dead), jonka koko muuttuu yhtälön Δd(t) = γ i(t) mukaisesti. Tutki infektion leviämistä, kun γ = 0.0013. Mikä differenssiyhtälö kuvaa infektoituneiden lukumäärän kehittymistä, kun malliin on lisätty kuolleiden ryhmä? Kuinka suuri osa populaatiosta lopulta kuolee? Vertaa kuolevien osuutta parametrien β ja γ keskinäiseen suhteeseen γ β+γ. Mitä havaitset? Mistä havaintosi voisi johtua? v Liitä vastauksiisi kuva eri ryhmien kehittymisestä ajan funktiona. Anna kuvan otsikoksi oma nimesi. Lisää kuvaan myös legend ja anna akseleille nimet. MS-C2107 Sovelletun matematiikan tietokonetyöt 20

Kotitehtävä: Kulutus-investointimallin simulointi Tehtävänäsi on simuloida kansantalouden kehitystä käyttäen yksinkertaista kulutus-investointimallia. Mallissa BKT (Y ) on kulutuksen (C) ja investointien (I) summa: Y (t) = C(t) + I(t) Kulutus riippuu edellisen vuoden BKT:stä kaavan C(t) = αy (t 1) mukaisesti, missä α on marginaalinen alttius kuluttaa edellisen vuoden BKT. Investoinnit riippuvat kulutuksesta kaavan I(t) = β(c(t) C(t 1)) + γ mukaisesti, missä β kuvaa investointien riippuvuutta kulutuksen kasvusta ja γ on valtion vuosittainen investointi (oletetaan vakioksi). MS-C2107 Sovelletun matematiikan tietokonetyöt 21

Kotitehtävä: Kulutus-investointimallin simulointi 1. Kirjoita for-silmukkaa käyttäen scripti, jolla simuloit kansantalouden toimintaa 50 vuoden aikavälillä (t = 1, 2,..., 50) seuraavilla lähtötiloilla ja parametrien arvoilla: A. C(0) = 1000 Me, I(0) = 1000 Me, α = 0.89, β = 0.89 ja γ = 500 Me. B. C(0) = 1000 Me, I(0) = 1000 Me, α = 0.75, β = 1.4 ja γ = 500 Me. C. C(0) = 500 Me, I(0) = 500 Me, α = 1.0, β = 1.1 ja γ = 300 Me. Kuvaile lyhyesti talouden kehitystä jokaisessa skenaariossa. Miten skenaario A poikkeaa muista? MS-C2107 Sovelletun matematiikan tietokonetyöt 22

Kotitehtävä: Kulutus-investointimallin simulointi 2. Matti Matemaatikko kertoo sinulle, että BKT:lle löytyy myös analyyttinen ratkaisu Ŷ (t) = k 1 r t 1 + k 2 r t 2 + c, (1) k 1 = 1.27 + 0.98i, k 2 = 1.27 0.98i, r 1 = 0.84 0.29i, r 2 = 0.84 + 0.29i ja c = 4.55 Kirjoita funktio, joka ottaa argumenttina vektorin vuosia (t 1,..., t m ) ja palauttaa vektorin (Ŷ (t 1),..., Ŷ (t m)). Älä käytä silmukkarakenteita vaan komentoa.^! Esimerkiksi syöte 2.^[1,3] antaa tulokseksi [2,8]. Huom. Voit käyttää Matlabissa kompleksilukuja aivan samoin kuin reaalilukujakin. Luku sijoitetaan muuttujaan esim. a=2-3i. MS-C2107 Sovelletun matematiikan tietokonetyöt 23

Kotitehtävä: Kulutus-investointimallin simulointi Vertaa saamaasi tulosta 1A-kohdan simuloituihin tuloksiin. Onko Matti ratkaissut tehtävän oikein? (eli päteekö Y = Ŷ?) v Liitä vastauksiisi kuvat (3 kpl) simuloinnin tuloksista käyttäen annettuja parametrejä. Jokaisessa kuvassa tulee näkyä BKT:n, investointien ja kulutuksen kehitys 50 vuoden aikana. Lisäksi A-kohdan kuvassa tulee olla analyyttisellä kaavalla ratkaistut pisteet (vain pisteet, ei viivaa). Nimeä käyrät, akselit ja laita otsikoksi oma nimesi. v Liitä vastauksiisi kommentoitu lähdekoodi. MS-C2107 Sovelletun matematiikan tietokonetyöt 24