MATLAB Ohjelmointi Osa 1. Timo Mäkelä

Samankaltaiset tiedostot
Johdatus lukuteoriaan Harjoitus 1 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Todennäköisyysjakaumat 1/5 Sisältö ESITIEDOT: todennäköisyyslaskenta, määrätty integraali

Differentiaali- ja integraalilaskenta 1 Ratkaisut 1. viikolle /

Tehtävä 2 Todista luennoilla annettu kaava: jos lukujen n ja m alkulukuesitykset. ja m = k=1

Tehtävä 3. Määrää seuraavien jonojen raja-arvot 1.

Ennen kuin mennään varsinaisesti tämän harjoituksen asioihin, otetaan aluksi yksi merkintätekninen juttu. Tarkastellaan differenssiyhtälöä

2 Taylor-polynomit ja -sarjat

Hanoin tornit. Merkitään a n :llä pienintä tarvittavaa määrää siirtoja n:lle kiekolle. Tietysti a 1 = 1. Helposti nähdään myös, että a 2 = 3:

Matematiikan tukikurssi

J1 (II.6.9) J2 (X.5.5) MATRIISILASKENTA(TFM) MALLIT AV 6

Pyramidi 3 Analyyttinen geometria tehtävien ratkaisut sivu 139 Päivitetty a) 402 Suplementtikulmille on voimassa

Joulukuun vaativammat valmennustehtävät ratkaisut

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

2.8 Mallintaminen ensimmäisen asteen polynomifunktion avulla

DEE Lineaariset järjestelmät Harjoitus 2, ratkaisuehdotukset. Johdanto differenssiyhtälöiden ratkaisemiseen

JOHDATUS LUKUTEORIAAN (syksy 2017) HARJOITUS 1, MALLIRATKAISUT

järjestelmät Diskreettiaikaiset järjestelmät aikatason analyysi DEE Lineaariset järjestelmät Risto Mikkonen

ELEMENTTIMENETELMÄN PERUSTEET SESSIO 12: Tasokehän palkkielementti, osa 2.

z z 0 (m 1)! g(m 1) (z0) k=0 Siksi kun funktioon f(z) sovelletaan Cauchyn integraalilausetta, on voimassa: sin(z 2 dz = (z i) n+1 k=0

järjestelmät Luku 2 Diskreettiaikaiset järjestelmät - aikataso DEE Lineaariset järjestelmät Risto Mikkonen

V. POTENSSISARJAT. V.1. Abelin lause ja potenssisarjan suppenemisväli. a k (x x 0 ) k M

MS-A0402 Diskreetin matematiikan perusteet

Luku kahden alkuluvun summana

Luento 2. S Signaalit ja järjestelmät 5 op TKK Tietoliikenne Laboratorio 1. Jean Baptiste Joseph Fourier ( )

TAMPEREEN YLIOPISTO Pro gradu -tutkielma. Hannu Pajula. Stirlingin luvuista

Riemannin sarjateoreema

[ ] [ 2 [ ] [ ] ( ) [ ] Tehtävä 1. ( ) ( ) ( ) ( ) ( ) ( ) 2( ) = 1. E v k 1( ) R E[ v k v k ] E e k e k e k e k. e k e k e k e k.

Kun annettu differenssiyhtälö z-muunnetaan puolittain, saadaan: 1 1 z Y z zy z z/4 4

Sattuman matematiikkaa III

VALIKOITUJA KOHTIA LUKUTEORIASTA

Ylioppilastutkintolautakunta S tudentexamensnämnden

funktiojono. Funktiosarja f k a k (x x 0 ) k

5. Potenssisarjat 5.1. Määritelmä ja suppeneminen

DEE Lineaariset järjestelmät Harjoitus 5, harjoitustenpitäjille tarkoitetut ratkaisuehdotukset

Todennäköisyyslaskenta IIa, syys lokakuu 2019 / Hytönen 1. laskuharjoitus, ratkaisuehdotukset

Kertausosa. Kertausosa. 4. Sijoitetaan x = 2 ja y = 3 suoran yhtälöön. 1. a) Tosi Piste (2,3) on suoralla. Epätosi Piste (2, 3) ei ole suoralla. 5.

9 Lukumäärien laskemisesta

Perustehtäviä. Sarjateorian tehtävät 10. syyskuuta 2005 sivu 1 / 24

Olkoot X ja Y riippumattomia satunnaismuuttujia, joiden odotusarvot, varianssit ja kovarianssi ovat

HARMONINEN VÄRÄHTELIJÄ

Matemaattinen Analyysi

TRIGONOMETRISTEN FUNKTIOIDEN KUVAAJAT

Luento 5. Timo Savola. 28. huhtikuuta 2006

3. Markovin prosessit ja vahva Markovin ominaisuus

Järjestelmän kuvaus aikatasossa

C (4) 1 x + C (4) 2 x 2 + C (4)

VÄRÄHTELYMEKANIIKKA SESSIO 19: Usean vapausasteen systeemin liikeyhtälöiden johto Newtonin lakia käyttäen

1. YKSISUUNTAINEN VARIANSSIANALYYSI: AINEISTON ESITYSMUODOT

DISKREETIN MATEMATIIKAN SOVELLUKSIA: KANAVA-EKVALISOINTI TIEDONSIIRROSSA. Taustaa

Zeon PDF Driver Trial

KJR-C2002 Kontinuumimekaniikan perusteet, viikko 45/2017

b 4i j k ovat yhdensuuntaiset.

M 2 M = sup E M 2 t. E X t = lim. niin martingaalikonvergenssilauseen oletukset ovat voimassa, eli löydämme satunnaismuuttujan M, joka toteuttaa ehdon

termit on luontevaa kirjoittaa summamuodossa. Tällöin päädymme lukusarjojen teoriaan: a k = s.

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

Talousmatematiikan verkkokurssi. Koronkorkolaskut

Vakuutusmatematiikan sovellukset klo 9-15

Projekti 5 Systeemifunktiot ja kaksiportit. Kukin ryhmistä tarkastelee piiriä eri taajuuksilla. Ryhmäni taajuus on

Luento 2 / 12. SMG-1200 Piirianalyysi II Risto Mikkonen

Luku 1: Järjestelmien lineaarisuus, differenssiyhtälöt, differentiaaliyhtälöt

Luku 1: Järjestelmien lineaarisuus, differenssiyhtälöt, differentiaaliyhtälöt

4.7 Todennäköisyysjakaumia

q =, r = a b a = bq + r, b/2 <r b/2.

(c) Määrää/Determine välillä/in the interval [1000, 10000] olevien 7. jaollisten kokonaislukujen lukumäärä/ number of integers divisible by 7.

M y. u w r zi. M x. F z. F x. M z. F y

Valon diffraktio yhdessä ja kahdessa raossa

Eulerin φ-funktion ominaisuuksia

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

DI matematiikan opettajaksi: Täydennyskurssi, kevät 2010 Luentorunkoa ja harjoituksia viikolle 11: ti klo 13:00-15:30

Eksponentti- ja logaritmiyhtälö

STOKASTISET DIFFERENTIAALIYHTÄLÖT 7

Ohjelmoinnin perusteet Y Python

Mekaniikan jatkokurssi Fys102

2 b 1 + b 1 x. = b 1 (x 4) (x 2) b 1 (x 2)

III. SARJATEORIAN ALKEITA. III.1. Sarjan suppeneminen. x k = x 1 + x 2 + x ,

Reaalifunktiot 1/5 Sisältö ESITIEDOT: funktiokäsite

K-KS vakuutussumma on kiinteä euromäärä

± r = 1e 2 2 ±

1. Harjoituskoe. Harjoituskokeet. 1. a) Valitaan suorilta kaksi pistettä ja määritetään yhtälöt. Suora s: (x 1, y 1 ) = (0, 2) (x 2, y 2 ) = (1, 2)

Vakuutusteknisistä riskeistä johtuvien suureiden laskemista varten käytettävä vakuutuslajiryhmittely.

Heilurin differentiaaliyhtälö

Java-kielen perusteita

Suoran yhtälöt. Suoran ratkaistu ja yleinen muoto: Suoran yhtälö ratkaistussa, eli eksplisiittisessä muodossa, on

4.3 Erillisten joukkojen yhdisteet

102 Käyrä. Piste ( 3,0 ) on käyrällä, jos ja vain jos sen koordinaatit. Siis piste ( 1, 2) Siis piste ( 3,0 ) ei ole käyrällä.

S Hahmontunnistus ihmisläheisissä käyttöliittymissä Kasvojen tunnistus ja identiteetin tarkistus: ZN-Face

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin peruskurssi Y1

Kokonaislukuaritmetiikka vs. logiikkaluupit

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

Modaalilogiikan harjoitusteht vi Aatu Koskensilta 1 Harjoitusteht v t Teht v 100 a) Osoitamme, ett Th(F 1 F 2 ) Th(F 1 ) [ Th(F 2 ) vastaesim

Ohjelmoinnin peruskurssi Y1

2.1. Bijektio. Funktion kasvaminen ja väheneminen ********************************************************

11. Javan toistorakenteet 11.1

järjestelmät Luku 1 Johdanto; termit ja käsitteet 1 DEE Lineaariset järjestelmät Risto Mikkonen

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3

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

Matlab- ja Maple- ohjelmointi

Transkriptio:

MATLAB Ohjelmointi Osa Timo Mäelä SISÄLTÖ:. YLEISTÄ.... M-TIEDOSTOT.... SYÖTTÖ JA TULOSTUS.... FUNKTIOT...4. FUNKTION RAKENNE...4. ALIFUNKTIOT JA YKSITYISET FUNKTIOT...7.3 FUNKTION MUUTTUJAT...7 3. OHJAUSLAUSEET...9 3. TOISTOLAUSEET...9 3.. for-lause...9 3.. while-lause...3 3..3 Sovellus Fourier-sarja...5 3. EHTOLAUSEET...8 3.. if-lause...8 3.. switch-lause... 3..3 tr-lause...5 3.3 KESKEYTYSLAUSEET...7 4. DIFFERENSSIYHTÄLÖT...7 4. TEORIAA...7 4.. Differenssihtälö...7 4.. Differenssihtälörhmä...9 4. NUMEERINEN RATKAISEMINEN...3 4.. Differenssihtälö...3 4.. Differenssihtälörhmä...34

MATLAB Ohjelmointi Osa. YLEISTÄ. M-tiedostot MATLABin tehoas ättö on mahdollista vasta, un osaa ohjelmoida MATLABilla. MATLA- Bissa on orean tason ohjelmointiieli, jolla ohjelmia tehdään. Ohjelmointi MATLABilla on helpompaa uin varsinaisilla ohjelmointiielillä. Omat ohjelmat laajentavat MATLABin äsjä. Usein toistuvat omentosarjat annattaa tehdä ohjelmisi. Seuraavassa esitellään MATLABohjelmoinnin aleita. Vaia tässä lähdetäänin perusteista, omasumista helpottaa se, että luija on hiuan perillä ohjelmoinnista. Ohjelmat ovat m-tiedostoja. Nimits tulee siitä, että niiden tarenteena on.m. M-tiedostot voivat olla sriptejä tai funtioita. Nämä eroavat seuraavasti: Sripti on vain jono omentoja, joita ätetään automatisoimaan lasentaa. Sriptin muuttujat ovat leisiä omentoiunan muuttujia. Funtio on ohjelma, jona liittminen ulomaailmaan tapahtuu sisäänmeno- ja ulostuloparametrien autta. Funtion muuttujat ovat funtion sisäisiä muuttujia, joten ne eivät soteudu omentoiunan muuttujiin. Funtiota voidaan ättää laajentamaan MATLA- Bin ominaisuusia. M-tiedostoja on äsitelt aiemmin testissä Matlab Perusteet luvussa 6. Tässä testissä esittään ohjelmien eli funtioiden muodostamiseen. M-tiedostoja ajetaan omentorivillä aivan samoin uin muitain MATLABin omentoja. Sripti ajetaan irjoittamalla m-tiedoston nimi ilman tarennetta.m. Funtio ajetaan irjoittamalla funtion nimi ja antamalla suluissa oleville utsuparametreille arvot. M-tiedosto voidaan luoda editorilla. Editori voidaan ännistää omennolla edit (tai edit TiedostonNimi) valioomennolla File: New: M-file tai File: Open painieilla. M-tiedoston sisällön voi tulostaa omentoiunaan omennolla tpe tiedoston_nimi. Tiedostonimen tarenteen.m voi tiedoston nimestä jättää pois. Oletushaemistossa olevien tiedostojen nimet saa nätölle omennolla what. ESIMERKKI. Seuraavassa on toteutettu Lissajous n ärien piirto sriptinä ja funtiona. Tee ohjelmat editorilla ja tallenna tiedostoihin. Thjennä MATLABin tötila Worspace omennolla Edit: Clear Worspace ennen sriptin ja funtion ajoa. Mitä eroa on tötilassa ajojen jäleen? Sripti: Tallenna sripti tiedostoon Lissajous.m. Voit ajaa sriptin äsllä Lissajous. Sulje ensin grafiiaiuna. Anna omento ja paina viisi ertaa Enteriä. Nätölle tulostuu viisi erilaista Lissajous n ärää. % Lissajous'n-äriä t :.:*pi; for :5 plot(cos(*t),sin(()*t)) pause

MATLAB Ohjelmointi Osa Funtio: Tallenna funtio tiedostoon lissa.m. Funtio voidaan ajaa esim. omennolla lissa(,5). Koeile tätä! Sulje ensin grafiiaiuna. Anna omento ja paina Enteriä, unnes uusia uvia ei tule. Nätölle tulostuu erilaisia Lissajous n äriä. Funtiossa on asi utsuparametria, joille utsussa annetaan arvot. Koeile erilaisia arvoja. Huomaa, että tämä funtio ei palauta mitään arvoa. function lissa(m,n) % Lissajous'n-äriä funtiona t :.:*pi; for m:n plot(cos(*t),sin(()*t)) pause Molemmissa m-tiedostoissa esiintvää for-silmuaa äsitellään taremmin möhemmin. Komento pause aiheuttaa sen, että ohjelma jää odottamaan jonin painieen painamista.. Söttö ja tulostus Normaalisti funtio välittää tietoa mpäristön anssa parametrien välitsellä. MATLABissa on uitenin tavanomaisten ohjelmointiielten tppisiä söttö- ja tulostusäsjä, joista joitain esitetään seuraavassa. Kirjoittamalla muuttujan nimi tulostetaan nätölle muuttujan nimi ja arvo. Komennolla disp(a) tulostetaan pelästään muuttujan A arvo. Jos on A on merijono tulostetaan merijonon sisältävä testi. >> A [ ;3 4]; >> A A 3 4 >> disp(a) 3 4 >> disp('tässä on merijono') Tässä on merijono Näppäimistöltä luetaan omennolla a input(ehote). Tällöin nätölle tulostuu merijono ehote ja muuttujaan a tallennetaan ättäjän näppäimistöltä sötett arvo. Merijonoon ehote saadaan rivinvaihto aiaisesi mereillä \n. Sötett arvo voi sisältää tötilassa olevia muuttujia. Merijono on sinertaisten lainausmerien sisällä oleva testi.

>> input('anna : ') Anna :.7 MATLAB Ohjelmointi Osa 3.7 >> input('anna : ') Anna : *5 8.4 >> A input('anna uusi matriisi.\nmatriisi? ') Anna uusi matriisi. Matriisi? [ 3; 4 7] A 3 4 7 >> mn input('anna matriisin ertaluu: ') Anna matriisin ertaluu: size(a) mn Komennolla a input(ehote, s ) luettu arvo tallennetaan muuttujaan a merijonona. >> valinta input('jatetaano (/n)? ','s') Jatetaano (/n)? valinta ESIMERKKI. Seuraavassa on sinertainen selevä ohjelma funtion uvaajan piirtämisesi. function plotfun disp('piirretään funtion f() uvaaja välillä [a,b]'); fun input('anna funtio :','s'); vali input('anna väli [a,b]: '); clf; ezplot(fun,vali); Ohjelman ajo tapahtuu seuraavasti: >> plotfun Piirretään funtion f() uvaaja välillä [a,b] Anna funtio :*sin(/) Anna väli [a,b]: [-,] Piirtoiunaan tulee funtion uvaaja. sin(/).8.6.4. -. - -.5.5

TEHTÄVIÄ. MATLAB Ohjelmointi Osa 4. Tee ohjelma, joa s lämpötilaa Celsius-asteina ja tulostaa sen Fahrenheit-asteina. Kätä lasennassa aavaa: F 8, C 3.. Tee ohjelma, joa lasee ataistun mpräartion tilavuuden V. ( r r r r ) πh V, 3 missä h on mpräartion oreus r on pohjamprän säde r on ansimprän säde. Ohjelma s söttöarvot ättäjältä ja tulostaa tilavuuden nätölle.. FUNKTIOT. Funtion raenne Funtio oostuu seuraavista osista:. Funtion määrittelrivi. Tämä on ohjelman ensimmäinen rivi, joa ertoo MATLABille, että m-tiedosto sisältää funtion. Tällä rivillä esitellään funtion nimi sisäänmenoparametrit ulostuloparametrit Funtion määrittelrivi on muotoa missä function out_param funtion_nimi(in_param), in_param sisältää funtion sisäänmeno- eli utsuparametrit. Ne irjoitetaan pilulla erotettuna. Jos sisäänmenoparametreja ei ole voidaan sulut jättää pois. out_param ilmoittaa ulostuloparametrit. Niitä voi olla o ei htään: jätetään oonaan pois tai irjoitetaan [ ]. o si: irjoitetaan ulostuloparametrin nimi o useampi: irjoitetaan ulostuloparametrien nimet pilulla erotettuna haasuluihin ESIMERKKEJÄ. function lissa(m,n) function A heron(a,b,c) function [,,] sphecar(rho,theta,phi). H-rivi. Tämä on ommenttirivi, joa on ohjelman toinen rivi. Rivi alaa %-merillä MATLAB tulostaa H-rivin, un help-omento ohdistetaan haemistoon. Tämän osan voi jättää pois.

MATLAB Ohjelmointi Osa 5 3. Help-testi. Nämä ovat ommenttirivejä, jota alavat riviltä olme. Help-testi päätt thjään riviin tai omentoriviin. MATLAB tulostaa H-rivin ja help-testin, un helpomento ohdistetaan tiettn funtioon. Tämän osan voi jättää pois. 4. Funtion runo. Tämä osa sisältää funtion varsinaisen ohjelmaoodin antaa arvon mahdollisille ulostulo-parametreille. 5. Kommentit. Kommentit alavat %-merillä ja päättvät rivin lopussa. Kommentteja voi sijoittaa minne tahansa ohjelmassa. Osat,, 3 ja 4 on oltava ohjelmassa tässä järjestsessä. Osat ja 4 ovat paollisia. ESIMERKKI. Määritellään funtio heron(a,b,c), jolla on olme parametria: function A heron(a,b,c) % HERON Kolmion pinta-ala % heron(a,b,c) lasee olmion pinta-alan, un olmion sivujen % pituudet ovat a, b, c. p (abc)/; % Kolmion piirin puolias A sqrt(p*(p-a)*(p-b)*(p-c)); Tallennetaan funtio haemistoon wor. Kohdistetaan help-omento niseen haemistoon: >> help wor HERON Kolmion pinta-ala Kohdistetaan help-omento funtioon: >> help heron HERON Kolmion pinta-ala heron(a,b,c) lasee olmion pinta-alan, un olmion sivujen pituudet ovat a, b, c. Funtioita ätetään seuraavasti: >> heron(3,4,5) ans 6 Funtion nimen muodostaminen noudattaa samoja sääntöjä uin muuttujan nimen muodostaminen: nimen on alettava irjaimella ja se voi sisältää irjaimia (ei uitenaan ääösiä), numeroita ja alaviivoja. Nimen 63 ensimmäistä meriä otetaan huomioon. Isot ja pienet irjaimet ovat eri irjaimia.

MATLAB Ohjelmointi Osa 6 Funtio on stä tallentaa samannimiseen m-tiedostoon, muuten voi tulla vaieasti havaittavia virheitä. Siis funtio fun tallennetaan tiedostoon fun.m. Funtio ajetaan irjoittamalla funtion nimi ja suluihin funtion sisäänmenoparametrien arvot. Taremmin: funtion function [,,...] funtion_nimi(,,...) ajo omennolla funtion_nimi(a,a,...) palauttaa ensimmäisen ulostuloparametrin arvon muuttujaan ans. b funtion_nimi(a,a,...) palauttaa ensimmäisen ulostuloparametrin arvon ja tallentaa sen muuttujaan b. [b,b,...] funtion_nimi(a,a,...) palauttaa ulostuloparametrien arvot ja tallentaa ne muuttujiin b,b,... ESIMERKKI. Tehdään funtio, jona sisäänmenoparamterina on vetori ja ulostuloparametreina vetorin suurin ja pienin arvo. Funtio: function [min,ma] minma(vect) min min(vect); ma ma(vect); Funtion ajo: >> v rand(,); >> minma(v) % Ensimmäinen ulostuloparametri ans.9 >> [,]minma(v) % Molemmat ulostuloparametrit..9.9943 TEHTÄVIÄ.. Tee ohjelma, jona sisäänmenoparametrina on lämpötila Celsius-asteina ja ulostuloparametrina on lämpötila Fahrenheit-asteina. Kätä lasennassa aavaa: F 8, C 3.. Tee ohjelma, jona sisäänmenoparametreina on asi reaaliluua ja ulostuloparametreina reaaliluujen summa ja tulo. 3. Tee ohjelma, joa lasee mprän missä setorin pinta-alan A α π 36 r r α segmentin pinta-alan A g π sin α 8 r on mprän säde

α on esusulma asteina. MATLAB Ohjelmointi Osa 7 Ohjelman sisäänmenoparametreina on luvut r ja α ja ulostuloparametreina A ja A. 4. Tee ohjelma, joa tulostaa tauluon Celsius- ja Fahrenheit-asteiden vastaavuusista. Söttötietoina annetaan Celsiusasteiden alaraja, läraja ja tauluointiväli. Kätä lasennassa aavaa: F 8, C 3.. Alifuntiot ja sitiset funtiot M-tiedosto voi sisältä useita funtioita. Tiedoston ensimmäinen funtio on pääfuntio (primar function), muut funtiot ovat alifuntiota (subfunction). Vain pääfuntio ja muut samassa m- tiedostossa olevat alifuntiot voivat utsua alifuntiota. Joainen alifuntio alaa määrittelrivillä ja sisältää oodin normaaliin tapaan. Alifuntiot voivat olla missä järjestsessä tahansa. Ysitinen funtio (private function) on funtio, joa sijaitsee alihaemistossa private. Vain private-haemiston äiti-haemistossa olevat funtiot voivat utsua sitistä funtiota. Alifuntioita ja sitisiä funtioita ättäen voidaan luoda tietstä ohjelmasta paiallinen versio. Tämä johtuu siitä, että MATLABissa funtion tai muuttujan nimen selvittäminen tehdään seuraavassa järjestsessä: Taristetaan. ono seessä muuttuja.. ono seessä utsuvan funtion alifuntio. 3. ono seessä ono seessä utsuvaan funtioon liittvä sitinen funtio. 4. ono seessä join funtio MATLABin haupolussa. Haupolussa ensimmäinen ohdattu nimi valitaan. Jos on useita samannimisiä funtioita, valitaan o. järjestsessä ensimmäinen..3 Funtion muuttujat Funtion muuttujista voidaan todeta seuraavaa: Muuttujan nimi alaa irjaimella. Muuttujassa voi olla oreintaan 63 meriä. Muuttujia ei tarvitse esitellä. Sijoitusäs luo muuttujan tai muuttaa muuttujan arvon. Funtion muuttujat ovat loaaleja eli funtion sisäisiä. Niitä ei voi ättää funtion ulopuolella. Poieusena ovat globaalit muuttujat ja psvät muuttujat. Globaali muuttuja on sellainen muuttuja, jona arvo on ätettävissä ja muutettavissa aiissa niissä funtioissa, joissa muuttuja on määritelt globaalisi. Jos globaalia muuttujaa halutaan ättää omentoiunassa, on se sielläin määriteltävä globaalisi. Globaalit muuttujat suositellaan määriteltäväsi funtion alussa ennen niiden ättöä. Komennolla global z määritellään muuttujat,, z globaaleisi. Psvä muuttuja on sellainen loaali muuttuja, jona arvo säil seuraavaan funtion utsuun asti. Komennolla persistent z g

MATLAB Ohjelmointi Osa 8 määritellään muuttujat,, z psvisi. Psvää muuttujaa voi ättää vain funtion sisällä. Psvät muuttujat on määriteltävä funtion alussa ennen niiden ättöä. ESIMERKKI. Tehdään funtio, joa tallennetaan tiedostoon herong.m. Huomaa, että funtiossa ei ole utsuparametreja. function A herong() % HERON Kolmion pinta-ala % HERON() lasee olmion pinta-alan, un olmion sivujen % pituudet ovat a, b, c % muuttujat a, b, c ovat globaaleja. global a b c p (abc)/; % Kolmion piirin puolias A sqrt(p*(p-a)*(p-b)*(p-c)); Annetaan omentoiunassa globaalimäärittel >> global a b c Annetaan muuttujille arvot >> a 3; b 4; c 5; Ajetaan funtio >> herong ans 6 Muutetaan a:n arvo: >> a 5 a 5 Ajetaan funtio >> herong ans 9.65 Kuten o. funtiosta nähdään, parametrien välits globaalien muuttujien välitsellä ei ole ovinaan havainnollista. Tämä saattaa johtaa vaieasti havaittaviin virheisiin. Sisi globaalien muuttujien ättö on stä rajoittaa vain erioistilanteisiin. Globaalit muuttujat suositellaan irjoitettavisi isoilla irjaimilla. Tällöin virheellinen ättö ehä pienenee. TEHTÄVIÄ.

MATLAB Ohjelmointi Osa 9. Ketjupörästön etjun pituuden L määrittäminen. Söttötietoina annetaan etjupörien säteet R ja r seä etjupörien esipisteiden etäiss c. Ketjun pituus L lasetaan ättäen seuraavia aavoja L t b b, missä t b b c ( R r) ( 8 α) π 8 ( 8 α) 8 R πr Edellä ulman α siö on aste ja se määrät ehdosta R r sinα. c Tee ohjelma, jolla voit määrittää etjun pituuden. 3. OHJAUSLAUSEET Ohjauslauseita ättäen voidaan raentaa monipuolisia ohjelmia. MATLABissa on toteutettu aii modernien ohjelmointiielten ohjauslauseet. 3. Toistolauseet Toistolauseita ätettäessä palataan tietn ehdon vallitessa hä uudelleen toistamaan jo aiaisemmin suoritettuja toimenpiteitä. Näin muodostuu ohjelmaan silmua. 3.. for-lause for-lauseessa toistetaan äsjä ennalta määrätt määrä. for-lauseen muoto on for alu:asel:loppu lauseita Oletusarvona on asel. Lauseen toiminta on seuraava: Silmuamuuttuja saa aii arvot arvosta alu arvoon loppu aseleella asel: alu, aluasel, alu*asel,, (loppu). Kullain muuttujan arvolla suoritetaan lauseet lauseita. ESIMERKKI. Muodosta seuraava tridiagonaalinen matriisi: 3 3 3 3 3 Viimeinen arvo on pienempi tai htä suuri uin loppu.

Annetaan seuraavat omennot >> A 3*ee(5) A 3 3 3 3 3 >> for :4 A(,); A(,); >> A A 3 3 3 3 3 MATLAB Ohjelmointi Osa Komentoa diag (s. help) ättäen matriisi voidaan muodostaa lhemminin: >> 3*ee(5)diag(ones(,4),)diag(ones(,4),-) ESIMERKKI. Tauluoidaan funtion Toteutus for-lauseella: sin arvot välillä [,π] ättäen aselta,4. >> []; []; % Alustetaan vetorit >> for :.4:*pi [ ]; [ sin()]; >> [;]' ans.4.3894.8.774..93.6.9996..993.4.6755.8.335 3. -.584 3.6 -.445 4. -.7568 4.4 -.956 4.8 -.996 5. -.8835 5.6 -.633 6. -.794 Nopeampi ja suositeltava tapa:

MATLAB Ohjelmointi Osa >> :.4:*pi; >> [;sin()]' Yleisemmin for-lause voidaan esittää seuraavasti: for lausee lauseita Tässä lauseeen lausee saraeet tallennetaan si errallaan silmuamuuttujaan. Kullain muuttujan arvolla suoritetaan lauseet lauseita. Jos A on m n-matriisi, niin lause for v A lauseita taroittaa samaa uin lause for j :n v A(:,j) lauseita ESIMERKKI. Matriisille A omento sum(a) antaa tulosesi vaaavetorin, jona aliot oostuvat matriisin A saraeiden summista. Toteutetaan tämä for-lausetta ättäen. Tapa : Tehdään ensin editorilla funtio vect_sum, joa lasee vetorin alioiden summan. function sum vect_sum() % VECT_SUM Vetorin alioiden summa sum ; for i :length() sum sum (i); ; % Alustetaan muuttuja nollasi % Muuttujaan sum erätään summa. Sen jäleen tehdään editorilla funtio matr_sum, joa toteuttaa omennon sum. function sar_sum matr_sum(a) % MATR_SUM Matriisin rivivetorien summa sar_sum []; for v A sar_sum [sar_sum vect_sum(v)]; ; % Huomaa lasentatapa! Tapa : Lasetaan suoraan matriisin rivivetorinen summa: function sum matr_sum(a) % MATR_SUM Matriisin rivivetorien summa sum ; for v A' sum sum v; ; sum sum'; % Alustetaan nollasi % Lasetaan rivivetorien summat % Ulostuloparametri rivivetorina

MATLAB Ohjelmointi Osa Ohjelmia tehtäessä testaus aina täreä. Testataan ohjelmat satunnaismatriisilla. >> A rand(,5); >> sum(a) ans 5.7468 4.9347 4.8 5.45 4.64 >> matr_sum(a) ans 5.7468 4.9347 4.8 5.45 4.64 >> matr_sum(a) ans 5.7468 4.9347 4.8 5.45 4.64 Kättämällä MATLABin tauluo-operaattoreita, voidaan usein välttää for-lauseen ättö. ESIMERKKI. Lasetaan summa n 4 9 6 n eri tavoilla. Tehdään toteutuset funtioilla. Tapa : for-lauseen ättö. Tavallisia ohjelmointiieliä ätettäessä toteutus on tämän tapainen function s summa(n) % SUMMA Luujonon summan lasenta % for-lauseella s; for :n ss/^; % Muuttujan alustus Tapa : Tauluo-operaattoreiden ättö. Mitään silmuaa ei tarvita! function s summa(n) % SUMMA Luujonon summan lasenta % tauluo-operaatioilla. :n; s sum(./.^); Testataan toteutusten nopeusia. Mitataan aia omentoparilla tic-toc. >> tic; summa(),toc ans.6449 Elapsed time is.74985 seconds. >> tic; summa(),toc ans.6449 Elapsed time is.36488 seconds.

MATLAB Ohjelmointi Osa 3 Havaitaan, että tapa on noin asi ertaa nopeampi uin tapa. Tämä ero ei useinaan ole merittävä, joten tapa elegantimpana on suositeltava. TEHTÄVIÄ.. Tee ohjelma, joa lasee n:n ensimmäisen oonaisluvun neliöiden summa.. Tee ohjelma, joa luee luuja näppäimistöltä ja tulostaa luujen esiarvon. Luettavien luujen määrä annetaan ennen luujen söttöä. 3.. while-lause while-lauseen muoto on seuraava: while ehto lauseita Lauseen toiminta on seuraava: Lauseita lauseita toistetaan niin auan uin toistoehto ehto on tosi eli muuttujan ehto reaaliosa on eri suuri uin nolla. Toistoehto ehto taristetaan ennen lauseen suoritusta. Jos toistoehto on epätosi () ensimmäisellä erralla, lausetta ei suoriteta ertaaaan. ESIMERKKI. Selvitetään mistä :n arvosta lähtien eps. >> ; >> while ^(-)>eps ; >> 5 Taristus >> eps ans.4e-6 >> ^(-) ans.4e-6 >> ^(-) ans 4.449e-6 ESIMERKKI. Lottoarvonta. Lotossa arvotaan 7 luua väliltä 39. Toteutetaan lottoarvonta. Ohjelmassa esiintvää omentoa unique on äsitelt jouo-opin htedessä Monisteen Matlab Perusteet luvussa 8.3. function lotto

MATLAB Ohjelmointi Osa 4 rand('state',sum(*cloc)); numerot floor(39*rand(,7)); while(length(unique(numerot))<7) numerot floor(39*rand(,7)); ; disp(sort(numerot)); % Alustetaan satunnaisluugener. % Arvotaan lottonumerot % Jos jouossa samoja luu % suoritetaan uusi arvonta. % Tulostetaan suuruusjärjests. while-lausetta ättäen voidaan testata sötön oieellisuutta ja sötön lopetusta: ESIMERKKI. Tehdään ohjelma, joa lasee harmonisen luujonon n 3 n summia. Ohjelma s ättäjältä oonaisluvun n arvo ja tulostaa summan. Summien lasenta lopetetaan söttämällä luu nolla. function harmoninen % Harmonisen luujonon summan lasenta. disp('harmonisen luujonon summan lasenta'); n ; while(n~) n input('anna termien luumäärä (lopetus ): '); ssum(./(:n)); disp(s); Ohjelman ajo on seuraavanlaista: >> harmoninen Harmonisen luujonon summan lasenta Anna termien luumäärä (lopetus ): 5.874 Anna termien luumäärä (lopetus ): 7.4855 Anna termien luumäärä (lopetus ): TEHTÄVIÄ.. Tee ohjelma, joa luee näppäimistöltä positiivisia luuja ja tulostaa luujen aritmeettisen esiarvon ( ) geometrisen esiarvon n n a n g n

harmonisen esiarvon MATLAB Ohjelmointi Osa 5 h n Luujen söttö lopetetaan söttämällä negatiivinen luu tai nolla. 3..3 Sovellus Fourier-sarja Jasollinen funtio f, jona on jaso T, voidaan esittää trigonometrisena Fourier-sarjana missä a f, () t ( a cos ωt b sin ωt) π ω T on ulmataajuus ja ertoimet lasetaan integraaleina a b T T t T t t T t f f () t () t cos ωt dt sin ωt dt Toteutetaan tämä MATLABilla. (,,, ) (,, 3, ). Seuraava ohjelma lasee Fourier-sarjan ertoimet. Ohjelma sisältää asi alifuntiota ja m- tiedoston sisäisiä globaaleja muuttujia. function [a,b,w] four_trig(fun,t,t,n) % FOUR_TRIG Trignometrisen funtion Fourier-sarjan ertoimien lasenta. % [a,b,w] four_trig(fun,t,t,n) % Sisäänmenoparamtetrit: % - fun ahva funtioon % - T funtion fun perusjason alaraja % - T funtion fun perusjason läraja % - n ooaisluu, joa ilmoittaa lasettavien Fourier-ertoimien % luumäärän % Ulostuloparametrit: % - a osiniertoimet rivivetorina [a, a, a,...] % - b siniertoimet rivivetorina [ b, b,...] % - w jasoa on vastaava ulmataajuus. global w f T T-T; w *pi/t; f fun; a[]; b[]; for :n a [a /T*quadl(@fun_cos,T,T)]; b [b /T*quadl(@fun_sin,T,T)]; n function fun_cos(t) global w f % Alifuntio

feval(f,t).*cos(*w*t); MATLAB Ohjelmointi Osa 6 function fun_sin(t) % Alifuntio global w f feval(f,t).*sin(*w*t); Fourier-sarjan approsimaation arvoja voidaan lasea seuraavalla ohjelmalla: function four_trig_arvo(a,b,w,t) % FOUR_TRIG_ARVO Fourier-sarjan määräämän funtio arvon lasenta % four_trig_arvo(a,b,w,t) % Sisäänmenoparametrit: % - a rivivetori, joa sisältää osiniertoimet % - b rivivetori, joa sisältää siniertoimet % - w jasoa vastaava ulmataajuus % - t ajanheti n length(a); a()/; for :n a()*cos((-)*w*t)b()*sin((-)*w*t); ESIMERKKI. Pulssijonon Fourier-sarja. Ysiöaselta u (s. Matlab Perusteet luu 9.) ja jasollista jatoa jj (s. Matlab Perusteet luu 9.) ättäen muodostetaan pulssijono >> f @(t) (u(t)-u(t-)); >> g @(t) f(jj(t,,3)); Piirretään uva pulssijonosta >> t-7:.:7; >> plot(t,g(t)) >> lim([-.3,.3]).5-8 -6-4 - 4 6 8 Määritetään Fourier-sarjan ensimmäistä errointa. >> [a,b,w]four_trig(g,,3,); Tulostetaan alu näviin. >> w

MATLAB Ohjelmointi Osa 7 w.944 >> [a(:5); b(:5)] ans.3333 -.757.378. -.689.4775.387 -..94 Tämä muaan Fourier-sarjan alu on,3333 f () t,757 cos(,944t),378cos(,944t)...,4775sin(,944t),387 sin(,944t)... Piirretään saatu Fourier-sarjan approsimaatio samaan uvaan uin pulssijono. >> hold on >> four_trig_arvo(a,b,w,t); >> plot(t,) >> hold off.5-8 -6-4 - 4 6 8 TEHTÄVIÄ.. Jasollinen reaaliarvoisen funtio f, jona on jaso T, voidaan esittää esponenttimuotoisena Fourier-sarjana f missä ja () t π ω T c T t T t c e f () t iωt e, iωt dt. Fourier-sarjan ertoimille pätee c c. Tee ohjelmat, joilla voidaan lasea Fourier-sarjan ertoimet ja lasea Fourier-sarjan approsimaation arvoja.

3. Ehtolauseet MATLAB Ohjelmointi Osa 8 Ehtolauseessa ohjelman osa sisältää valinnan vaihtoehtoisten ohjelmahaarojen välillä. Valinta perustuu usein muuttujan arvojen vertailuun tai muuttujan ja vaion väliseen vertailuun. 3.. if-lause if-lauseen muoto on seuraava: if ehto lauseita elseif ehto lauseita elseif ehto n lauseita n else lauseita Lauseen toiminta on seuraava: Jos ehto on tosi, niin suoritetaan lauseita, muuten jos ehto on tosi, niin suoritetaan lauseita jne, muuten suoritetaan lauseita. Raenteesta voi puuttua elseif- ja else-osat, joten sinertaisimmillaan if-lause on if ehto lauseita Jos if-lauseen ehto ei ole salaari, on aiien ehtolauseeen alioiden oltava nollasta eroavia. Esimerisi matriisille X lause if X lauseita on htäpitävä lauseen anssa. if all(x(:)) lauseita ESIMERKKI. Tarastellaan funtion

MATLAB Ohjelmointi Osa 9 f ( ), un, un < 5, un > esittämistä ja uvaajan piirtämistä MATLABissa. Funtio voidaan määritellä seuraavana m- funtiona: 3 function fun() if < - ; elseif < ^-; else -5; Lasetaan sittäisiä arvoja >> fun(-3),fun(),fun(3) ans - ans - ans - - -4-4 Vetorille arvot ovat >> fun([-3,,3]) ans 8 5 Nämä ovat väärin. If-lauseen ehdoissa verrataan oo vetoria. Ehdot < - ja < eivät päde aiille vetorin aliolle, joten päädtään else-osaan. Vetorin aliot siis lasetaan lauseeella -5. Tämä on väärin. M-funtiossa fun ei siis saa ättää vetoriargumenttia. Jos halutaan piirtää tämän funtion uvaaja on ätettävä for-lausetta. Määritetään piirtoväli: >> -3:.:4; >> []; >> for t [ fun(t)]; >> plot(,) Hanaluudet johtuvat if-lauseen ätöstä. Tätä ei tarvitaaan, vaan funtio voidaan määritellä seuraavasti (s. Matlab Perusteet luu 9.) function gun() (<-).*()((>-)&(<)).*(.^-)(>).*(-5);

MATLAB Ohjelmointi Osa Tällöin vetoriargumentilla lasenta onnistuu >> gun([-3,,3]) ans - - ja piirto voidaan suorittaa omennolla >> plot(,gun()) ESIMERKKI. Arvauspeli. Ohjelma arpoo oonaisluvun tietltä väliltä. Kättäjän on arvattava tämä oonaisluu. Jos ättäjä vastaa väärin, ilmoittaa ohjelma, ono luu liian suuri vai liian pieni ja antaa ättäjälle uuden vastausmahdollisuuden. Ohjelma päätt un ättäjä on antanut oiean luvun. Ohjelma on seuraava. Tallenna ohjelma tiedostoon ArvaaLuu.m. function ArvaaLuu() M ; luu floor(m*rand); disp('arvaa oonaisluu väliltä'); disp([,m]); arvaus input('arvaus: '); load laughter; while (arvaus ~ luu) sound(,fs); if arvaus > luu disp('luu liian suuri'); else disp('luu liian pieni'); ; arvaus input('arvaus: '); ; disp('oiein') load handel; sound(,fs) Ohjelmassa on ätett omentoja seuraavia omentoja: load tiedosto: Ladataan muuttujat tiedostosta tiedosto. sound(,fs): Soitetaan vetorissa oleva signaali. ESIMERKKI. Polnomien hteenlasu Valmiita soittoelpoisia signaaleja löt omassa oneessani haemistosta D:\Program Files\MATLAB7\toolbo\matlab\audiovideo

MATLAB Ohjelmointi Osa MATLABissa polnomi esitetään rivivetorina, joa sisältää polnomin ertoimet alenevien potenssien muaan järjestettnä. Esim. polnomi p ( ) 3 5 esitetään muodossa >> p [ - 5]; Polnomien hteenlasu suoritetaan siten, että samojen potenssien ertoimet lasetaan hteen. 3 3 Esimerisi ( 5) ( 3 6 ) 3 4 3. Tämä ei uitenaan onnistu suoraan MATLAB-esitsessä, sillä eo. hteenlasua vastaa hteenlasu >> [,, -, 5] [3, 6, -]??? Error using > Matri dimensions must agree. Ennen hteenlasua on vaaavetorien pituudet tehtävä samoisi lisäämällä mahdollisesti nollia toisen vetorin eteen. >> [,, -, 5] [, 3, 6, -] ans 3 4 3 Tehdään ohjelma, jolla voidaan suorittaa polnomien hteenlasua. Ohjelman on lisäsi poistettava mahdolliset alussa olevat nollat tulosvetorista. Tallennetaan ohjelma tiedostoon polplus.m function p polplus(a,b) % POLYPLUS polnomien hteenlasu % polplus(a,b) lasee polnomien a ja b summan. na length(a); nb length(b); % Lasetaan polnomien summa: if na > nb p a [zeros(,na-nb),b]; elseif nb > na p [zeros(,nb-na),a] b ; else p a b; % Poistetaan mahdolliset alunollat: while p() p() []; Koeillaan ohjelmaa: >> polplus([,, -, 5],[3, 6, -]) ans 3 4 3 >> polplus(,[-,,-3]) ans - - >> polplus([4 3],[-4 -,,-3]) ans 3

MATLAB Ohjelmointi Osa TEHTÄVIÄ.. Muuta esimeriä Arvauspeli (ohjelma ArvaaLuu.m) seuraavasti: Ohjelma ptää ättäjää antamaan positiivisen oonaisluvun, joa on arvattavan luvun suurin arvo. Ohjelma testaa, että annettu luu on positiivinen, jos ei niin ohjelma ptää luua uudestaan.. Tee ohjelma, joa s ättäjältä appalemäärän ja siöhinnan. Ohjelma tulostaa tavaraerän hinnan. Alennus määrät hinnan perusteella seuraavasti: jos hinta on li, niin alennus on % jos hinta on li, niin alennus on 5% jos hinta on li 5, niin alennus on % 3. Tee ohjelma joa luee Cooperin testin tulosen ( min aiana juostu mata miehille 3-39 v.) ja tulostaa seuraavan testin: jos mata < 53, tulostetaan "Erittäin heio unto". jos 53 mata < 84, tulostetaan "Heio unto". jos 84 mata < 4, tulostetaan "Välttävä unto". jos 4 mata < 64, tulostetaan "Hvä unto". jos mata 64, tulostetaan "Erinomainen unto" 4. Tee ohjelma, joa lasee ns. painoindesin I. Painoindesi I määrät seuraavasti: m I s, missä m s on paino iloina on pituus metreinä. Ohjelma on tulostettava painoindesin arvo ja lisäsi seuraava ommentti: 3.. switch-lause jos I, "alipaino" jos < I 5, "normaalipaino" jos 5 < I 3, "lievä lipaino" jos 3 < I 35, "huomattava lipaino" jos 35 < I 4, vaiea lipaino jos I > 4, "sairaalloinen lihavuus". switch-lauseen muoto on seuraava: switch lausee case arvo lauseita case arvo lauseita case arvo n lauseita n

otherwise lauseita Yllä lausee on salaari- tai merijonolausee. Lauseen toiminta on seuraava: MATLAB Ohjelmointi Osa 3 Lauseeen lausee arvo lasetaan. Verrataan lauseeen lausee arvoa case-osassa määriteltjen vaiolauseeiden arvoihin. Vertailu suoritetaan järjestsessä lähtien arvosta arvo. Miäli lauseeen lausee arvo on sama uin case-osan vaiolauseeen arvo, ohjelman suoritus siirt seiseen case-osaan. Vain tässä case-osassa olevat lauseet suoritetaan. Sen jäleen poistutaan switch-lauseesta. otherwise-osa ei ole paollinen. Jos lauseeen lausee arvo ei vastaa minään case-osan arvoa, niin ohjelman suoritus siirt otherwise-osaan, jos raenteessa on otherwise-osa switch-lausetta seuraavaan lauseeseen, jos otherwise-osaa ei ole. Perusmuodossaan switch-lauseen toiminta on siten sama uin seuraavaan if-lauseen toiminta: if lausee arvo lauseita elseif lausee arvo lauseita elseif lausee arvo n lauseita n else lauseita case-osassa vertailu taroittaa seuraavaa testiä: luvuille: lausee arvo merijonoille : strcmp(lausee, arvo) hden arvon sijasta voidaan verrata moneen arvoon laittamalla arvot aaltosulujen sisään eli muodostamalla solutauluo case {a, a, a3, } lauseita Huom. switch-raenne ei vuoda läpi: vain ensimmäistä case-arvoa vastaavat lauseet suoritetaan ja sen jäleen poistutaan raenteesta. ESIMERKKI. Tehdään funtio, joa ilmoittaa ono arpauution tulos pariton vai parillinen. Komento äsitellään möhemmin merijonojen htedessä.

Tallennetaan seuraava funtio tiedostoon arpauutio.m: function arpauutio(tulos) switch tulos case {, 3, 5} disp('pariton') case {, 4, 6} disp('parillinen') otherwise disp('väärä luu') Ajetaan ohjelmaa: >> arpauutio() parillinen >> arpauutio(7) väärä luu >> arpauutio() pariton MATLAB Ohjelmointi Osa 4 ESIMERKKI. Tehdään ohjelma, joa tulostaa arpoo satunnaisia veiausrivejä. function veiaus rand('state',sum(*cloc)); rivi floor(3*rand(,)); for : switch(rivi()) case disp('') case disp('') case disp('') if mod(,3) disp(' '); % Alustetaan satunnaisluugener. % Arvotaan rivi % Tulostetaan thjä rivi Ohjelman ajo tuottaa seuraavanlaisen tulosen: >> veiaus

MATLAB Ohjelmointi Osa 5 ESIMERKKI. Satunnaisävel -tasossa. Satunnaisävelssä lähdetään liieelle origosta ja liiutaan joa aseleella satunnaisesti si siö joo vaaasuuntaan oiealle tai vasemmalle tai pstsuuntaan lös tai alas (neljä vaihtoehtoa). Toteutetaan satunnaisävel funtiona, jona sisäänmenoparametrina on aseleiden luumäärä. function avel(n) zeros(,n); zeros(,n); for :n suunta floor(4*rand); switch suunta case ()(); ()(); case ()()-; ()(); case ()(); ()(); case 3 ()()-; ()(); plot(,,'o-'); TEHTÄVIÄ.. Satunnaisävel -tasossa tietlle etäisdelle. Muunna esimeriä satunnaisluuävelstä siten, että satunnaisävel päätt, un ollaan annetulla etäisdellä origosta. Toteuta satunnaisävel funtiona, jona sisäänmenoparametrina on etäiss origosta. Ohjelma piirtää uvan reitistä. Ohjelma ulostuloparametri on aseleiden luumäärä.. Tee ohjelma, joa luee ensin asi reaaliluua ja sitten hden oonaisluvun. Luetun oonaisluvun perusteella teee seuraavaa: jos luu on, lasetaan reaaliluujen summa jos luu on, lasetaan reaaliluujen erotus jos luu on 3, lasetaan reaaliluujen tulo jos luu on 4, lasetaan reaaliluujen osamäärä jos luu on join muu, tulostetaan virheilmoitus. 3..3 tr-lause tr-lauseen muoto on seuraava: tr,

lause,, lause, catch, lause,, lause, Lauseen toiminta on seuraava: MATLAB Ohjelmointi Osa 6 Suoritetaan sanojen tr ja catch välissä olevia lauseita, unnes tapahtuu virhe. Sen jäleen suoritetaan sanojen catch ja välissä olevat lauseet. Komennolla lasterr saadaan selville virheen aiheuttaja. ESIMERKKI. Tehdään seuraava sripti ja tallennetaan se m-tiedostoon oeïlu.m tr, a/b; catch, disp('jaolasu ei onnistu') Tösennellään omentoiunassa. >> lasterror('reset') % Alustetaan virheilmoitus perustilaan >> a ; b 3; % OK >> oeilu >> a ; b ; % Tulee varoitus >> oeilu Warning: Divide b zero. > In oeilu at >> lasterror ans message: '' identifier: '' stac: [ struct] >> a [ 3]; b [3 4 5]; % Tulee virhe >> oeilu Jaolasu ei onnistu >> lasterror ans message: [54 char] identifier: 'MATLAB:dimagree' stac: [ struct]

3.3 Kesetslauseet MATLAB Ohjelmointi Osa 7 Kesetslauseilla voidaan tavalla tai toisella esettää raenne: tulla raenteesta pois tai jättää osa raennetta suorittamatta. Toistolauseissa for ja while voidaan ättää seuraavia esetslauseita: brea: siirrtään toistolausetta seuraavaan lauseeseen. continue: pstään toistolauseessa, mutta jätetään continue-lauseen jäleiset ohjelmasilmuan lauseet suorittamatta. Funtiosta voidaan poistua return-omennolla. Normaalisti funtiosta poistutaan, un viimeinen funtion lause on suoritettu. return-lause mahdollistaa poistumisen mös muuten. Ohjelman suoritus voidaan psättää seuraavasti: pause: psättää funtion suoritusen. Suoritus jatuu, un jotain näppäintä painetaan. pause(n): psättää ohjelman suoritusen n:n seunnin ajasi. ESIMERKKI. pause-omento on ätevä grafiian esitsessä. Sulje grafiia-iuna. Tee editorilla seuraava sripti ja aja se. t linspace(,*pi,); for u :: plot(cos(t).^u,sin(t).^u); ais equal hold on pause() hold off.5 -.5 Saat ahden seunnin välein äriä samaan uvaan. - -.5.5 4. DIFFERENSSIYHTÄLÖT 4. Teoriaa 4.. Differenssihtälö Luujono on jono luuja, jota on indesoitu oonaisluvuilla. Indesijouo voi olla aii oonaisluvut tai oonaisluujen osaväli. Luujonon :ttä aliota meritään tai. Usein oo luujonoa meritään lhesti. Kertaluua n oleva differenssihtälö on muotoa (,,..., ) F, n, n oleva htälö. Seuraavassa tarastellaan vain sellaisia htälöitä, joissa jolloin htälö voidaan esittää muodossa f (,,..., ), n n n ( ) voidaan rataista, ()

MATLAB Ohjelmointi Osa 8 Luujono on differenssihtälön rataisu, jos se toteuttaa differenssihtälön aiilla,,, Jos arvoille,,, n on annettu mielivaltaiset arvot voidaan htälöstä () reursiivisesti lasea rataisun arvot indesistä n eteenpäin. Siten differenssihtälön aluarvoprobleemalla, jossa on määritettävä se rataisu, joa toteuttaa aluehdot ˆ, ˆ ˆ,, n n on siäsitteinen rataisu. ESIMERKKEJÄ. Eräs pöllölaji lisäänt % vuodessa. Jos on pöllöjen määrä :n vuoden päästä, niin,,. Luujono toteuttaa siis seuraavan differenssihtälön ( ),. Jotta olisi määritelt on tiedettävä eli pöllöjen määrä aluhetellä. Tässä tapausessa on helppo määrittää leinen aava, jolla. Differentiaalihtälön disretointi. voidaan lasea. Analogiset prosessit mallinnetaan usein differentiaalihtälöiden avulla. Tällaiset mallit on disretoitava, un niitä halutaan äsitellä osana disreettiä järjestelmää. Kun differentiaalihtälö disretoidaan, siitä snt differenssihtälö. Tarastellaan esimerinä differentiaalihtälöä d dt () t a f. Tässä esiintvä tuntematon funtio disretoidaan ättäen disretointiaselta seuraavasti: Määritellään luujono : ( ) Derivaatta voidaan disretoida erotusosamäärällä: ( ) ( T ) ( T ) d dt Päädtään seuraavaan differentiaalihtälön disretointiin : missä f f ( ) a f Tästä saadaan sieventämällä differenssihtälö ( a ) f, Indesijouon alaraja voi olla muuin uin nolla. Tämä johtaa Eulerin menetelmään.

MATLAB Ohjelmointi Osa 9 3. Fibonaccin luvut määritellään seuraavasti: ensimmäinen luu on toinen luu on sen jäleen luu on ahden edellisen summa. Luvut liittvät seuraavaan ongelmaan, jota Fibonacci tuti vuoden tienoilla: Hedelmällinen jänispari sijoitetaan aitauseen. Kuina monta jänisparia on vuoden lopussa, jos jänisten lisääntminen noudattaa seuraavia sääntöjä: Hedelmällinen jänispari tuottaa uuden jänisparin joaisen uuauden lopussa. Uusi pari tulee hedelmällisesi hdessä uuaudessa Ysiään jänis ei uole. Jos :tta Fibonaccin luua meritään f f f f ( 3) f f ( ) f f f f ( ) f f :lla, niin tämä voidaan ilmaista seuraavasti: f Tässä on seessä differenssihtälö, jossa on asi aluehtoa. Fibonacci-luvut on määrätt reursiivisesti: luu on lausuttu edellisten luujen avulla. Differenssihtälö voidaan irjoittaa mös muotoon. Muuttamalla indesointia voidaan aluarvoprobleema lausua muodossa f. 4.. Differenssihtälörhmä. ertaluvun differenssihtälörhmä on muotoa missä ( ) f(, ( ), ( ),, n ( ) ) ( ) f (, ( ), ( ),, ( ) ) n ( ) f (, ( ), ( ),, ( ) ) ( ) ( ),, ( ), ovat tuntemattomia rataistavia luujonoja. n n n Leonardo Fibonacci (n. 8-4), Leonardo Pisalainen, oli italialainen matemaatio, jota voidaan pitää Euroopan ensimmäisenä matemaationa. Hän sai oulutusensa Pohjois-Afriassa. Fibonacci toi Eurooppaan arabialaiset numerot ja niihin liittvän positiojärjestelmään perustuvan lasutavan. Tässä luujonon alioita meritään ().

MATLAB Ohjelmointi Osa 3 Differenssihtälörhmän rataisu oostuu sellaisista luujonoista, jota toteuttavat differenssihtälörhmän aiilla,,,. Differenssihtälörhmän aluarvoprobleemassa on lödettävä se rataisu, joa indesin arvolla toteuttaa aluehdon ( ) ( ) ˆ ˆ n ( ) ˆ n missä ˆ, ˆ,, ˆ n ovat annettuja luuja. Aluarvoprobleemalla on siäsitteinen rataisu, sillä aluarvoista lähtien voidaan reursiivisesti lasea rataisun arvot indesien arvoilla,, 3, Differenssihtälörhmä voidaan esittää vetorimuodossa missä missä ( ) f, ( ) ( ), ( ( ) ), on n-vetori ja f on funtio, jona arvona on n-vetori. Aluehto on tällöin muotoa on annettu n-vetori. ESIMERKKEJÄ. Differenssihtälörhmän aluarvoprobleeman ( ) ( ) ( ) ( ) 3( ) ( ) rataisuja voidaan lasea reursiivisesti: ( ) ( ) 3 ( ) ( ) ( ) 3 7 ( ) 3( ) ( ) 3 3 3 ( ) ( ) ( ) ( 7) ( 3) ( ) 3( ) ( ) 3 ( 7) ( 3) 33 47 Rataisu voidaan esittää muodossa ( ) 4 ( ) ( ) 3 4 ( ) Kertaluua n oleva differenssihtälö (, ) n f, n,..., voidaan muuntaa. ertaluvun differenssihtälörhmäsi seuraavasti: () Indesijouon alaraja voi olla muuin uin nolla.

MATLAB Ohjelmointi Osa 3 Määritellään n luujonoa ( ) ( ) ( ) ( ) 3 n n Suoraan lasemalla todetaan, että nämä luujonot toteuttavat differenssihtälörhmän ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) f n n,...,,, 3 Tämä rhmä on differenssihtälöä () vastaava normaalirhmä. Luujono on differenssihtälön () rataisu, jos ja vain jos ( ) ( ) ( ) ( ) ( ) n,,, 4 on vastaavan normaalirhmän rataisu. Jos differenssihtälöön (*) liitt aluehto ˆ,, ˆ, ˆ n n niin vastaavan normaalirhmän aluehto on ( ) ( ) ( ) n n ˆ ˆ ˆ ESIMERKKEJÄ. Muunnetaan differenssihtälö,,, 5 3 normaalirhmäsi. Rataistaan ensin : 3 5 3 ( ) ( ) ( ) ( ) ( ) ( ) 5 5 3 3 3 3 Määritellään olme luujonoa ( ) ( ) ( ) 3 Tällöin ( ) ( )

josta saadaan normaalirhmä Aluehdot ovat 3 3 ( ) ( ) ( ) 3( ) ( ) 5 ( ) ( ) ( ) ( ) ( ) ( ) 3 4 MATLAB Ohjelmointi Osa 3 4. Numeerinen rataiseminen 4.. Differenssihtälö Differenssihtälön aluarvoprobleema voidaan rataista reursiivisesti ättäen esitstä n f (,,,..., n ). Seuraavassa on esitett funtio deqsolve, joa toteuttaa tämän: function deqsolve(fun,,n) % DEQSOLVE Differenssihtälön rataiseminen % deqsolve(fun,,n) % Sisäänmenoparametrit: % - fun ahva funtioon fun(n,), joa määrittää differenssihtälön % - aluehdot vetorina [,,...] % - n vetori, joa ilmoittaa missä pisteissä rataistaan. % Ulostuloparametri: % - rataisu vaaavetorina. ; ; for n(:-length()) feval(fun,,); [, ]; [(:),]; % Lasetaan vain indesiä vastaavat arvot Funtion deqsolve utsuparametrina oleva ahva funtioon fun määrittelee differenssihtälön. Funtion fun esittel on seuraava: missä function fun(, ), on salaari on vetori, joa sisältää arvot [,,..., n ] on salaari, joa sisältää lauseeen f (, ), n,..., arvon. Komento deqsolve(fun,,:n) rataisee differenssihtälön välillä n.

MATLAB Ohjelmointi Osa 33 ESIMERKKI. Määritetään Fibonaccin luujono arvoja. Fibonaccin luujono on differenssihtälön aluarvoprobleeman f rataisu., f, f f f. Differenssihtälön määrittelee seuraava m-funtio: function defun(,) ()(); Lasetaan ( ) ensimmäistä Fibonaccin luua: >> deqsolve(@defun,[,],:) ans 3 5 8 3 34 55 89 44 Tuhannes Fibonaccin luu on (indesointi alaa :sta) >> deqsolve(@defun,[,],:999); >> (999) ans.6864e8 ESIMERKKI. Rataistaan differenssihtälö 6,,. 6 Rataistaan : 6. Differenssihtälön määrittelee seuraava m-funtio: function defun(,) -()/6*()/(); Määritetään rataisu indesin arvoilla ja piirretään uvaaja. >> deqsolve(@defun,[,],:); >> plot(:,,'-o') >> grid

MATLAB Ohjelmointi Osa 34 5 5-5 - -5 5 5 Rataisujonon 6 ensimmäistä luua ovat >> (:7) ans.. -.8333.6667 -.47. -.454 4.. Differenssihtälörhmä. ertaluvun differenssihtälörhmän aluarvoprobleema voidaan rataista reursiivisesti ättäen vetoriesitstä ( ) f ( ( ) ),, Seuraavassa on esitett funtio dessolve, joa toteuttaa tämän: function dessolve(fun,,n) % DEsSOLVE Differenssihtälörhmän rataiseminen % dessolve(fun,,n) % Sisäänmenoparametrit: % - fun ahva funtioon fun(n,), joa määrittää differenssihtälön % - aluehto vetorina % - n vetori, joa ilmoittaa missä pisteissä rataistaan. % Ulostuloparametri: % - rataisu matriisina, jona :s sarae sisältäa rataisun indesin % arvolla. a size(); if a() % pstvetori '; else ; ; for n(:-) feval(fun,,); [, ];

MATLAB Ohjelmointi Osa 35 Komento dessolve(fun,,:n) rataisee differenssihtälörhmän välillä n. ESIMERKKI. Rataistaan luvun 4.. Esimerin differenssihtälörhmä ( ) ( ) ( ) ( ) 3( ) ( ) ( ) ( ) 3 Differenssihtälön määrittelee seuraava m-funtio: function desfun(n,) [-()-*();-3*()-*()]; Lasetaan rataisu indesin arvoilla 5:. >> dessolve(@desfun,[3,],:5) ans 3-7 33-7 53-47 -3 47-93 767-373 Siis () 7 ( ) () 3 ( ) 33 47 ESIMERKKI. Rataistaan luvun 4.. differenssihtälö ja vastaava normaalirhmä: Differenssihtälö: M-funtio: Komento function defun(,) 5*(3)-()*(); >> deqsolve(@defun,[-,,4],:5) ans - 4 8 93 459 Normaalirhmä: M-funtio: Komento function defun(,) [();(3);5*(3)-()*()]; >> dessolve(@defun,[-,,4],:5) ans - 4 8 93 459 4 8 93 459 43 4 8 93 459 43 948

MATLAB Ohjelmointi Osa 36 Havaitaan, että normaalirhmän rataisumatriisin ensimmäinen rivi on differenssihtälön rataisu.