MATLABin alkeita J.Merikoski JYFL 2009 fysp120



Samankaltaiset tiedostot
Zeon PDF Driver Trial

Matlabin perusteita Grafiikka

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

Valitse ruudun yläosassa oleva painike Download Scilab.

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

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

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

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

ELEC-C5210 Satunnaisprosessit tietoliikenteessä Harjoitus M1,

T Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet

Harjoitustyö: virtuaalikone

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

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

Harjoitus 10: Mathematica

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

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

Matemaattiset ohjelmistot A. Osa 2: MATLAB

BL40A0000 Säätötekniikan ja signaalinkäsittelyn

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

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

Matemaattiset ohjelmistot 1-2 ov, 2-3 op

BM20A0700, Matematiikka KoTiB2

Matlab- ja Maple- ohjelmointi

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

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

Ohjelmointiharjoituksia Arduino-ympäristössä

811120P Diskreetit rakenteet

Harjoitus 2: Ohjelmointi (Matlab)

Harjoitus 2: Ohjelmointi (Matlab)

Ohjeita LINDOn ja LINGOn käyttöön

Kokonaislukuaritmetiikka vs. logiikkaluupit

Matriiseista. Emmi Koljonen

MATLAB 7.1 Ohjelmointiharjoitus. Matti Lähteenmäki

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

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin perusteet Y Python

1.1. Määritelmiä ja nimityksiä

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

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Tieto- ja tallennusrakenteet

Johdatus tekoälyn taustalla olevaan matematiikkaan

Tieteellinen laskenta 2 Törmäykset

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

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

Harjoitus 4 -- Ratkaisut

Ohjelmoinnin perusteet Y Python

Ohjelman käynnistäminen

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

Scilab ohjelman alkeisohjeet

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

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

Harjoitus 2 -- Ratkaisut

Harjoitus 2 -- Ratkaisut

Ohjelmoinnin perusteet Y Python

Moottorin kierrosnopeus Tämän harjoituksen jälkeen:

linux: Ympäristömuuttujat

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

Java-kielen perusteet

linux: Ympäristömuuttujat

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

Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

MATLAB 6.0 m-tiedoston ohjelmointiopas. lähteenmäki.m

MATLAB OPAS. Matti Pastell. Maataloustieteiden laitos, Helsingin Yliopisto. 11. tammikuuta 2010

ASCII-taidetta. Intro: Python

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

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

Matlab-perusteet Harjoitustehtävien ratkaisut

Tilastolliset toiminnot

Harjoitus 1 -- Ratkaisut

Luento 4. Timo Savola. 21. huhtikuuta 2006

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

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

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Toinen harjoitustyö. ASCII-grafiikkaa 2017

YKSIKÖT Tarkista, että sinulla on valittuna SI-järjestelmä. Math/Units Ohjelma tulostaa/käyttää laskennassaan valittua järjestelmää.

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

Ohjelmoinnin peruskurssi Y1

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

FUNKTION KUVAAJAN PIIRTÄMINEN

PHP tehtävä 3 Atte Pekarinen TIKT13A

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

Käänteismatriisin ominaisuuksia

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

Tutoriaaliläsnäoloista

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

Numeerinen analyysi Harjoitus 3 / Kevät 2017

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

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

Excel syventävät harjoitukset

Python-ohjelmointi Harjoitus 5

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

Harjoitus 1 -- Ratkaisut

Transkriptio:

MATLABin alkeita J.Merikoski JYFL 2009 fysp120 Tämän pikaoppaan tarkoitus on auttaa nopeaan alkuun matlab-ohjelmiston käytössä. Keskitymme fyysikolle (välittömästi) hyödyllisimpiin komentoihin ja rakenteisiin. 1. MUUTTUJISTA Käynnistä matlab (matriisilaboratorio) ja kokeile seuraavia komentoja. Aloitetaan tällä kerralla antamalla matlabin komentorivillä seuraava, mahdolliset aiemmat muuttujat poistava komento: >> clear Seuraava komento määrittelee muuttujan a antaen sille samalla arvon 1. Toinen komento suorittaa merkin = oikealla puolella olevan operaation ja sijoittaa sen arvon muuttujaan a (joka voi olla reaalinen tai kompleksinen, jälkimmäisistä harjoituksissa). >> a=1 >> a=a+2 Jos en halua komentojen tulosten näkyvän ruudulla, voin käyttää puolipistettä: >> a=1; >> a=a+2; Muuttujan a arvon voin katsoa sanomalla (tai disp(a)-komennolla): >> a Voimme määritellä lisää muuttujia ja käyttää niitä luovasti, esimerkiksi: >> b=5 >> c=b+2 Monesti on käytännöllistä (erityisesti editointia ajatellen) kirjoittaa useampia komentoja samalle riville: >> a=6; b=2; c=a-b >> a=pi; b=2; c=a*b >> a=pi; b=2; c=a/b >> aaa=2.22; AAA=4.44; tulos=aaa+aaa Edellä käytimme valmiiksi määriteltyä vakiota pi. Potenssiinkorotus saadaan hatuttamalla: >> a=2; b=a^3; c=a+b*(-1)^(1/2) Tarvittaessa matlab siis siirtyy kompleksilukuihin. Katsotaanpa, millaisia muuttujia olemme luoneet: >> who >> whos Määritellyiksi tulleet muuttujat ovat siis matriiseja (eli taulukoita), yllä 1x1-matriiseja! Luodaanpa sitten suurempia, ensin rivi-ja sarakematriiseja (vektoreita), seuraavasti: >> a=[1,3] >> b=[2,6] >> c=a+b >> d=[1;3] >> whos Siis pilkku on erottimena matriisin rivien sisällä ja puolipiste rivien välillä >> h=[1,3;2,7] >> k=[1,0;0,1] >> h+k >> h-k >> h*k >> h.*k Huomaa matriisien kertominen elementeittäin (operaatio.*) viimeisessä komennossa. Matlabissa pelkkä kertomerkki (operaatio *) tarkoittaa matriisikertolaskua lineaarialgebran mielessä.

Harjoituksen vuoksi yhdistelemme aiemmin opittua: >> a=1; b=2; c=3; d=4; >> AA=[a,b;c,d] >> aa=ones(2,2) >> AA*aa >> AA.*aa Kokeile itse seuraavia matriisinmuodostuskomentoja: ones, eye, zeros, diag, rand. Niiden kuvaukset löydät esimerkiksi sanomalla: >> help eye Käytämme paljon vaakavektorin muodostavaa komentoa (parametrit vain esimerkin vuoksi): >> amini=0; amaxi=2; npist=10; a=linspace(amini,amaxi,npist); Matriisin alkioon tai osaan viittaaminen käy seuraavasti (huom: heittomerkki transponoi matriisin): >> BB=rand(3,3) >> BB(2,3) >> CC=BB(1:2,2:3)' >> BB(:,1) Lisää keskeisten matriisi- ja muiden funktioiden listoja saat näkyviin esim seuraavasti: >> help >> help elmat >> help elfun >> help general Luennolla mainostetun Kermit Sigmonin oppaan Matlab Primer (3th edition) lopussa on kätevä komentotaulukko. Kannattaa pitää tämä (tai muu vastaava opas) pdf:nä oman koneen levyllä. Tekstiarvoisetkin muuttujat eli merkkijonot eli stringit ovat käytössä ja yhdisteltävissä: >> puppua='merkkeja perakkain' >> lisaa=' ja muutama viela kuten ' >> numeromerkkikin='2' >> paljon=[puppua,lisaa,numeromerkkikin] 2. PERUSFUNKTIOITA JA YKSINKERTAISIA KUVAAJIA Tuotetaan ja tuhotaan seuraavaksi vektorit x ja y=sin(x) sekä niiden kuvaaja: >> x=linspace(0,2*pi,100); >> y=sin(x); >> plot(x,y); >> whos; >> clear x y >> clf; Seuraavassa nimetään akselit ja luodaan otsikko (vakio pi=2*asin(1) oli valmiiksi määritelty): >> x1=linspace(0,2*pi,1000); y1=cos(4*x1); >> x2=linspace(0,2*pi,1000); y2=cos(4*x2).*exp(-x2/5); >> plot(x1,y1,'b-'); hold on; plot(x2,y2,'m--'); >> xlabel('x'); ylabel('y'); title('testikuva'); >> legend('y1=cos(4*x1)','y2=y2=cos(4*x2).*exp(-x2/5)') Edellä komento hold on pitää aiemmin piirretyn käyrän (ja hold off vapauttaa sen) ja komento legend tuottaa selitteen. Luodaanpa uusi kuva (huomaa askel :4: toisessa plotissa): >> figure(2); plot(x1(1:20),y1(1:20),'gx'); hold on; plot(x2(10:4:50),y2(10:4:50),'ro'); >> xlabel('x'); ylabel('y'); title('toinen testikuva'); Kolmeulotteisia kuvia saa komennolla plot3. Perusohjeita kätevässä muodossa: >> help plot

3. KOMENTOJONOT JA OHJAUSRAKENTEET Muista ohjelmointikielistä mahdollisesti tuttuja ohjausrakenteita on käytössä. Tärkeimpiä meille ovat jatkossa for-silmukat sekä if-then-else-ehtorakenteet. Jälkimmäisten yhteydessä käytetään vertailuoperaatioita, joita ovat mm. > (suurempi), < (pienempi), == (yhtäsuuri) ja ~= (erisuuri), sekä loogisia operaatiota & (and), (tai) ja ~ (not). Kirjoita seuraava silmukkarakenne matlabin oletushakemistossa teksti-muotoiseen tiedostoon nimeltä kokeilu1.m (editorin saat käyttöön valikosta: FILE -> NEW -> M-FILE): x=0; for j=1:5, x=x+1; x Tallenna ja suorita sitten kyseinen komentojono eli skripti sanomalla matlabin komentorivillä: >> kokeilu1; Kysymällä lopussa muuttujan x arvon voimme todeta suorittaneemme viidesti komennon, jossa muuttujaan x on silmukan joka kierroksella lisätty luku 1, saaden tulokseksi arvon 5. Huomaa, että muuttuja j saa silmukassa arvot 1:stä 5:een. Esimerkiksi seuraava komentojono x=0; for j=1:5, x=x+j; summaa yhteen luvut 1:stä 5:een. Saman voit tehdä myös matlabin komentorivillä: >> x=0; for j=1:5, x=x+j; Harjoittelimme yllä silmukkarakenteen käyttöä. Huomautuksenomaisesti voimme todeta, että matlabissa toki on muitakin keinoja laskea lukuja yhteen kuten esimerkiksi funktio sum: >> xx=linspace(1,5,5); x=sum(xx); Rakenteita voi sijoittaa sisäkkäin, kuten seuraavassa (rivejä sisennetty selkeyden vuoksi): x=0; n=5; m=3; for j=1:m, x=x+i-j; Puolipisteitä ja pilkkuja ei tarvitse skripteissä aina rivien loppuun kirjoittaa, mutta se on hyvä tapa ja helpottaa vähitellen kertyvien skriptien ja niiden osien myöhempää käyttöä ja yhdistelyä. Laskemme seuraavaksi kahden matriisin tulon C=A*B käyttäen silmukkaa komentojonossa: % kokeilu2.m kahden satunnaismatriisin tulo n=2; A=rand(n,n); B=rand(n,n); C=zeros(n,n); for j=1:n, for k=1:n, C(i,j)=C(i,j)+A(i,k)*B(k,j); Merkintä A(i,j) tarkoittaa matriisin A alkiota (i,j) jne ja %-merkkien taakse voi komentojonossa kirjoittaa kommentteja, jotka eivät vaikuta komentojonon suoritukseen. Tulosta voi testatakin: >> kokeilu2; >> C >> A*B

Kokeilemme vielä yksinkertaista ehtorakennetta: Mitä tekee seuraava skripti? n=3; M=2*rand(n,n)-1; for j=1:n, if M(i,j)<0, M(i,j)=-M(i,j); Huomaa, että myös if-rakenteen sulkee end. Joskus tarvitaan useampia poikkeuksia sisältäviä testejä, kuten if x>1, s=2; elseif x>=0, s=1; else s=0; missä esiteltiin samalla vertailuoperaattori >= (suurempi tai yhtäsuuri kuin). 4. KUVIEN TULOSTAMISESTA JA TALLENTAMISESTA Kuvia voi tulostaa tiedostoon komennolla (huom: -d:n jälkeen ps=postscript ja c=color) >> print dps kuva1.ps Näin tulostettiin tällä hetkellä aktiivisessa kuvaikkunassa oleva kuva väripostscript-muodossa tiedostoon kuva1.ps oletushakemistoon. Matlab tarjoaa hyvin monenlaisia tulostusmuotoja, kuten ps, pdf, eps, jpg, tiff, png. Katso lisäohjeita sanomalla help print. Huom: Pelkkä print-komento ilman tarkenteita lähettää joissakin laiteympäristöissä kuvan suoraan oletusprintterille. Kustannussyistä suoraan paperille printtaamista kannattaa välttää ja tehdä kuva aina tiedostoon, jonka voi yllätysten välttämiseksi tarkistaa ennen paperille printtaamista. Muutenkin haluamme välttää tarpeettomia paperitulosteita. 5. DATAN TALLENTAMISESTA Kaikki määritellyt muuttujat voi tallentaa senhetkiseen oletushakemistoon komennolla >> save talletus01 Näin talletettu tiedosto on matlabin sisäistä muotoa (sen nimeksi tulee talletus01.mat) ja se on ladattavissa vaikkapa seuraavan istunnon alussa komennolla >> load talletus01 Voit tallettaa myös vain osan muistissa olevasta datasta (kts. save-komennon help). >> save osadatasta01 A B s Datan voi tallettaa myös teksti- eli ascii-muodossa, jolloin sitä voi lukea muilla ohjelmilla, esim: >> save matriisib.dat B ascii Ascii-muodossa tallennetunkin datan voi lukea matlabiin: >> load matriisib.dat Tällä tavalla luettaessa data tulee matlabissa matriisiin, jonka nimi onkin matriisib. Tämä voi tuntua aluksi hämäävältä, mutta osoittautuu hyvin hyödylliseksi esimerkiksi näin luettaessa mahdollinen matlabissa jo kenties eri tavalla määritelty matriisi B säilyy koskemattomana.

6. FUNKTIOT Tähän mennessä olemme kirjoitelleet yksinkertaisia komentojonoja m-tiedostoihin (m-file). Joskus halutaan, ettei komentojono sitä kutsuttaessa muuta muiden kuin sen sisäisten muuttujien arvoja (joilla saattaa olla samoja nimiä kuin kutsuvassa skriptissä). Tällöin otetaan käyttöön function. Funktio on skripti, jossa parametrien ja tulosten välittämisestä kutsuvan ja kutsuttavan skriptin välillä huolehditaan käyttäjän määräämällä tavalla. Esimerkiksi skriptiä % funk.m kahden n*n-satunnaismatriisin 0<A(i,j)<a ja 0<B(i,j)<b tulo function f = funk(n,a,b) A=a*rand(n,n); B=b*rand(n,n); C=zeros(n,n); for j=1:n, for k=1:n, C(i,j)=C(i,j)+A(i,k)*B(k,j); f=c; käytettäisiin komentorivillä vaikkapa komennolla H=funk(4,2,4). Palaamme funktioiden kirjoittamiseen myöhemmin esimerkkien valossa, kts. help function. 7. MUUTA MUKAVAA Matlabin komentorivillä voi aiempia komentoja selata nuolinäppäimillä. Jos kirjoitat jonkin aiemman komennon alun ja painat sitten nuolinäppäintä ylös, matlab hakee edellisen sellaisen komentosi, joka alkoi kyseisellä tavalla jne, mikä säästää elämääsi melkoisesti. Nuolinäppäinsiirtymien ohella komentoikkunassa on käytössä koko joukko komentorivien käsittelyä jouduttavia näppäinyhdistelmiä kuten Ctrl-a, Ctrl-e, Ctrl-k ja Ctrl-d, joita kannattaa kokeilla. Tekstistringejä kannattaa opetella käyttämään tehokkaasti, katso >> help strfun Kuvissa tarvittavat erikoismerkit kuten kreikkalaiset aakkoset ja indeksit onnistuvat mutkattomasti: >> xnimi='\gamma_{11} ({\mu}m)'; ynimi='\phi_{11} (kgm/s^{2})'; >> xlabel(xnimi); ylabel(ynimi); Numeeristen muuttujien arvoja voi muuttaa merkkijonoiksi (mm. komennot num2str ja int2str): >> x=0.123456; >> xstr=num2str(x); >> xstr=num2str(x,3); >> otsikko=['x=' xstr ' eikos niin']; >> title(otsikko); >> str2num(str) Ja päinvastoinkin (komento str2num jne): >> xxx=str2num(xstr)+9 Edistyneen käyttäjän vahva työväline on funktio nimeltä eval, joka suorittaa annetun merkkijonon matlabin komentona tai komentojonona. Esimerkki tästä: >> x3=linspace(0,2*pi,100) >> funk='cos'; >> mj=['y3=' funk '(x3);'] Näin olemme luoneet merkkijonon mj, jonka sisältö 'y3=cos(x3);' on matlabin komento, joka saadaan nyt eval-komennolla suoritettua ja tulos vaikka katsottuakin: >> eval(mj); >> plot(x3,y3,'o'); title(['katsotaanpa ' mj]); Komento eval soveltuu hyvin toimintojen automatisoimiseen silloin kun käsiteltävää dataa on massoittain. Yhdistettynä esimerkiksi funktion int2str kanssa voit luoda sillä vaikkapa juoksevalla indeksoinnilla varustettuja talletustiedostojen nimiä ja saat helposti käytettyä kaiken levykiintiösi. Komento Ctrl-c keskeyttää käynnissä olevan toiminnon suorittamisen - joskus pienellä viiveellä.