Harjoitus 2: Ohjelmointi (Matlab)

Samankaltaiset tiedostot
Harjoitus 2: Ohjelmointi (Matlab)

Harjoitus 3: Matlab - Matemaattinen mallintaminen

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

Ohjelmoinnin peruskurssi Y1

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

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

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

SCI-C0200 Fysiikan ja matematiikan menetelmien studio

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

Ohjelmoinnin perusteet Y Python

12. Javan toistorakenteet 12.1

Python-ohjelmointi Harjoitus 2

Ohjelmoinnin perusteet Y Python

Kokonaislukuaritmetiikka vs. logiikkaluupit

811120P Diskreetit rakenteet

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

811120P Diskreetit rakenteet

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

Matlabin perusteita Grafiikka

12. Javan toistorakenteet 12.1

Java-kielen perusteita

Algoritmit 1. Demot Timo Männikkö

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin perusteet Y Python

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

Ehto- ja toistolauseet

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Ohjelmoinnin perusteet Y Python

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

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

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

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

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 )

Matlab- ja Maple- ohjelmointi

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

Harjoitus 7 -- Ratkaisut

Harjoitus 4 -- Ratkaisut

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

Numeerinen analyysi Harjoitus 3 / Kevät 2017

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

16. Ohjelmoinnin tekniikkaa 16.1

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Ohjelmoinnin perusteet Y Python

Tieteellinen laskenta 2 Törmäykset

Valitse ruudun yläosassa oleva painike Download Scilab.

Matematiikan tukikurssi, kurssikerta 1

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

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

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 peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

Harjoitus 10: Mathematica

FUNKTION KUVAAJAN PIIRTÄMINEN

Matemaattiset ohjelmistot 1-2 ov, 2-3 op

Ratkaisuehdotukset LH 7 / vko 47

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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 perusteet Y Python

Ohjelmoinnin jatkokurssi, kurssikoe

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

ITKP102 Ohjelmointi 1 (6 op)

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

Python-ohjelmointi Harjoitus 5

Ohjelmoinnin perusteet Y Python

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Harjoitus 6: Symbolinen laskenta II (Mathematica)

Ratkaisuehdotukset LH 8 / vko 47

f(x) f(y) x y f f(x) f(y) (x) = lim

13. Hyvä ohjelmointitapa (osa 1) 13.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

Ohjelmoinnin peruskurssi Y1

Johdatus matematiikkaan

Transkriptio:

Harjoitus 2: Ohjelmointi (Matlab) SCI-C0200 Fysiikan ja matematiikan menetelmien studio SCI-C0200 Fysiikan ja matematiikan menetelmien studio 1

2. Harjoituskerta Aiheet: - Matlabin kontrollirakenteet - Funktiot ja komentojonotiedostot Matlabissa Osaamistavoitteet: - Osaat laatia omia funktioita ja komentojonotiedostoja - Hallitset tavallisimpien kontrollirakenteiden käyttämisen SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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). SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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); SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 MyCourses-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)). SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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? SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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? SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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) SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. Lisää kuvaan myös legend ja anna akseleille nimet. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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). SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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? SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 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 ja akselit. v Liitä vastauksiisi kommentoitu lähdekoodi. SCI-C0200 Fysiikan ja matematiikan menetelmien studio 24