Cleve Moler kirjoitti alkuperäisen Matlabin Fortran-version 1970-luvun loppupuolella pienimuotoiseksi matriisilaskennan opetusohjelmaksi. Kyseessä oli Fortranilla kirjoitettu matriisitulkki, joka käytti LINPACK- ja EISPACK- kirjastojen rutiineja laskentakoneenaan. Vaiheita:
Esikuvia kielelle: "Speak Easy" ja APL (Kenneth Iverson 1960-luvulla, Jim Brown, IBM Yorktown Heights: APL2 1984, ...)
Nykyisin : "Teollisuusstandardin asemassa", suuri määrä ammattimaisia toolboxeja.
Matlab on saatavissa kaikkiin ajateltavissa oleviin käyttöjärjestelmiin. Matlab-koodit ja työtilat talletetaan tekstimuodossa, mikä takaa ongelmattoman siirrettävyyden eri ympäristöjen välillä.
Matlab-ohjelman lisenssin omistaa The MathWorks, Inc. Matlab-käyttäjien uutisryhmä on varsin aktiivinen.
matlab
tai kaksoisklikkaamalla Matlab-ikonia.
use matlab matlab& tai esim matlab -nojvm (kaikki aloitustarkenteet: matlab -hOhjelma lopetetaan komennolla
>> quitKomento matlab ilman tarkenteita käynnistää graafisen käyttöliittymän. Tekstipohjainen käyttöliittymä, jossa toki piirrosgrafiikka on mukana, käynnistyy jälkimmäisellä tavalla, eli
matlab -nojvm käynnistys
< M A T L A B (R) > Copyright 1984-2008 The MathWorks, Inc. Version 7.6.0.324 (R2008a) February 10, 2008 To get started, type one of these: helpwin, helpdesk, or demo. For product information, visit www.mathworks.com.
Graafinen käyttöliittymä puolestaan helpottaa istunnon ja Matlabin ns. m-tiedostojen tallettamista, suorittamista ja hallintaa etenkin Windows-ympäristössä. Toki useimmat UNIX-käyttäjät pitänevät sitä myös mukavampana.
Ohjelman käynnistyttyä, tulkki antaa kehotteen >> . Tällöin sille voidaan kirjoittaa Matlab-komentoja. Ensimmäinen käyttötapa on tavallinen laskin, jossa on normaalit laskutoimitusmerkit + - * / ^ ja sijoitus muuttujaan ilmaistaan yhtäkuin-merkillä (=).
>> format bank; format compact % Tulostusasun säätelyä. » hinta=165000 hinta = 165000.00 » ala=63 ala = 63.00 » neliohinta=hinta/ala neliohinta = 2619.05 » euro=5.94573 euro = 5.95 » markoissa=neliohinta*euro markoissa = 15572.15Huomaa , että
format
-komento säätelee vain tulostusasua, eikä vaikuta
laskentatarkkuuteen.
Tämä näkyy hyvin, jos jatkamme edellä olevaa istuntoa:
» format long » euro euro = 5.94573000000000
Vaikka yllä oleva onkin hyödyllistä, niin se on kovin tavanomaista (ja tänä päivänä (10.9.08) jo aikansa elänyttä). Matlab:n voima alkaa näkyä, kun ryhdytään operoimaan vektoreilla ja matriiseilla.
» A=[1 -1 0;2+3 4.5 7;5 6 -1] A = 1.0000 -1.0000 0 5.0000 4.5000 7.0000 5.0000 6.0000 -1.0000 » v=[1; 2; 3] v = 1 2 3 » A=[1 -1 0;2+3 4.5 7;5 6 -1] A = 1.0000 -1.0000 0 5.0000 4.5000 7.0000 5.0000 6.0000 -1.0000 » A*v ans = -1 35 14Mitä opimme:
ans
.
Pienimuotoista Matlab-laskentaa voi harrastaa komentoikkunassa. Komentoja voi selata nuoli-ylös-näppäimellä samaan tapaan kuin Unix:n tcshellissä, ja komentoriviä voi editoida.
Vähänkin vakavampihenkinen työskentely kannattaa järjestää erillistä editori-ikkunaa hyödyntäen. Editorina voi käyttää Matlabin omaa File-valikosta avautuvaa editoria (Windows:ssa jo versiossa 5, Unix:ssa versiosta 6 alkaen). Yhtä hyvin voi käyttää mitä tahansa tekstieditoria.
Komennot voidaan kirjoittaa tekstitiedostoon, vaikkapa
Komentojonotiedostoja kutsutaan lyhyesti
skripteiksi. Skriptit ja
funktiotiedostot ovat yhteiseltä nimeltään m-tiedostoja,
molemmat ovat tyyppiä
tied.m olevia tekstitiedostoja. Funktiotiedosto alkaa avainsanalla
function ja se toimii, kuten funktion kuuluu: sille annetaan
syöteparametreja, ja se palauttaa yhden tai useamman tulosarvon.
Matlabin m-tiedosto-ohjetta voit lukea
lyhyen oppaan m-tiedosto-kertomuksesta sekä Matlabin omasta
dokumentaatiosta, kas tästä:
Avustusjärjestelmän www-pohjainen muoto on saatavissa myös
suoraan Mathworksin sivulta.
helpdesk käynnistää www-pohjaisen laajan avustus- ja
opiskelujärjestelmän hakuineen ym.
Matlabin
alkuperäinen tietorakenne on matriisi, jonka alkiot ovat Fortranin
kaksoistarkkuuden reaalisia tai kompleksisisia liukulukuja (n. 16 numeroa
10-järjestelmässä) Versiosta 5 alkaen tietorakenteita on lisätty, keskitymme
aluksi pelkästään alkuperäiseen matriisityyppiin.
Vektoreita ja skalaareja voidaan pitää erikoistapauksina matriisista,
viimemainittu on 1 x 1 - matriisi. Tästä ajattelusta seuraa, että rivivektorit
ja sarakevektorit erotellaan toisistaan, edelliset ovat 1 x n - ja jälkimmäiset
n x 1 - kokoisia matriiseja, missä n on vektorin pituus.
Versiosta 5 alkaen Matlabissa on myös sisäkkäisiä ja moniulotteisia
rakenteita.
Matriiseja voidaan luoda eri tavoilla:
Matlab näyttää komennon tuloksen tai muuttujan sisällön
(jota emme tässä
kuitenkaan näytä), ellei komentoa päätetä puolipisteellä.
Rivien erottimena on puolipiste, rivin alkioiden erottimena voidaan käyttää
tyhjän ohella myös pilkkua. Rivierottimena käy myös rivinvaihto, selkeämpää
lienee tällöin kirjoittaa myös puolipiste.
Vektorin (niin vaaka- kuin pysty) indeksointiin riittää yksi indeksi.
A(1,:) ilmaisee A-matriisin ensimmäisen rivin, yksinäinen
kaksoispiste jälkimmäisenä indeksinä tarkoittaa, että sarakeindeksi käy
läpi kaikki arvonsa . Vastaavasti A(:,2) tarkoitta A:n toista
saraketta. Edelleen, A(2:4,3:6) poimii riveistä [2,3,4]
sarakkeet [3,4,5,6]
Pelkkä kaksoispiste matriisin indeksinä tarkoittaa, että molemmat
indeksit saavat kaikki mahdollset arvonsa. Tällöin tulee tietää, kumpaa
matriisin indeksisuuntaa pidetään ensisijaisena. Paljastamme asian nyt:
Matlab on sarakeorientoitunut, eli järjestys on : 1. sarake, 2. sarake,
...
Esim
Indeksointia ja kaksoispistenotaatiota käsitellään tarkemmin kohdassa
2.1.1 ... Kts. myös [SKK] 2.9, ss. 23 - 25.
Halutkaamme piirtää välillä [0,1] funktio
Tarkemman kuvan saamme jakamalla välin hienommin. Tähän on kaksi oivallista
tapaa, joko muoto x=0:0.1:1; tai x=linspace(0,1,30);
Kokeile tai lue lisää (tai help colon, help linspace)
(Kaksoispiste on englanniksi "colon".) Homma hoituu näin:
Varoitus! Aloittelevan Matlab-urheilijan tyypillinen virheloukku
on pisteen unohtaminen "pisteittäisistä" vektorilaskutoimituksista.
Matriisijakolaskuun saat lisävalaistusta komentamalla help slash ,
kts. myös ...
Komento help elfun antaa alkeisfunktioluettelon
("elementary functios").
Edellä olemme jo käytelleet joitakin funktioita. Otetaan pieni kommentein
varustettu esimerkki-istunto, jossa esiintyy myös vanha tuttavamme
linspace
Esim.
Funktio log laskee (luonnollisen) logaritmifunktion arvon
jokaisessa x-vektorin komponentissa (
skalaarifunktio).
Piirrä log-funktion kuvaaja välillä (0,5) alkamalla yllä olevasta
karkeasta diskretoinnista
ja hienontaen sitten vaikkapa jakovölien lukumääriin 20,50,100.
Tehtävä 2
Fahrenheit-asteet saadaan Celsius-asteilla kaavasta F=1.8 C + 32 .
Tee (käden käänteessä) 2-sarakkeinen taulukko, jossa on 5:n (C-) asteen
välein arvot -40 ... 40 (siis C-sarake ja F-sarake vierekkäin).
Käännä taulukko myös vaakasuoraan ja muuttele taulukon rajoja ja askelta.
Kaiken tämän voit hyvin tehdä suoraan komentoikkunassa, selaamalla
komentopuskuria tarpeen mukaan "nuoli ylös"-näppäimella.
Muista, että Matlabissa ei ole Maplen tapaan vapaita muuttujia.
Niinpä et voi etukäteen kirjoittaa laskentakaavaa, vaan C-vektorin on oltava
olemassa ennen kaavan käyttöä. Tästä myös seuraa, että F ei päivity
automaattisesti (kuten Maplessa), vaan aina, kun C-vektoria muutetaan,
on haettava komentopuskurista F-kaava ja annettava sille ENTER:iä.
Otamme esille kestävän kehityksen periaatteet, jotka toimivat luotettavasti
kaikissa ympäristöissä ja nykyisin käytössä olevissa versioissa (uusin siis 7).
Graafinen käyttöliittymä huolehtii osasta yllä olevia toimia automaattisesti.
Joka tapauksessa siinä on aivan samoin syytä huolehtia tärkeiden komentojen
siirtämisestä talteen sopivaan editori-ikkunaan.
Avataan (Matlabin file-valikosta tai jollain muulla tekstieditorilla)
tiedosto
vaikkapa doku.txt tai doku.html,
johon kirjoitetaan
dokumenttia.
Käytetään leikkaus/liimaustekniikkaa dokumentin ja komentoikkunan välillä.
(Html-tiedostossa Matlab-komennot kannattaa sijoittaa
< pre> </pre >-
tägien väliin. ) Muista, että Unix:n X-liittymässä on erityisen
kätevää: maalataan hiiren vasemmalla, liimataan keskimmäisellä.
Editoidaan doku.txt-tiedostosta turhat tulosteet, virheilmoitukset ym. pois
ja lisätään kommentteja, selostusta ym.
Kaikki ovat ihan käyttökelpoisia työtapoja. Viimemainitussa tulee muistaa
antaa diary-komento ajoissa. Tosin Matlab-ikkunaa voi vierittää taaksepäin
ja komentoja selata nuoli ylös-näpäimella, joten armonaikaa jää jonkinverran. Myös "command history"-ikkuna on varsin hyödyllinen komentojen poimimisessa jälkeenpäin.
Varoitus: Älä luota save-komentoon
Monissa Matlab-oppaissa mainostetaan save-komentoa.
Siitä ei ole dokumentin tallettamisen kannalta mitään hyötyä. Se mahdollistaa
muuttujien tallettamisen levylle, mistä harvoin on hyötyä, paitsi
jatketteassa laskentaa jollain muulla ohjelmalla. Tärkeämpää
on yleensä tallettaa komennot, joilla muuttujat luotiin.
Tämä ei tarkoita, että komennot save ja load olisivat
tekijöiden mielestä hyödyttömiä. Päinvastoin, datan siirtäminen eri ohjelmien
välillä saattaa olla monessa tilanteessa tuiki tarpeellista.
Komennot save ja load
Pelkkä save tallettaa kaikki muuttujat tiedostoon
matlab.mat, josta ne
saadaan palautetuksi komennolla load.
>> save 'tiedosto.txt' x y z -ascii tallettaa muuttujat x,y,z
mainittuun tiedostoon ascii-tekstinä.
Kts. vanhaa L1.html ***
Jotta näitä ei aina tarvitse toistaa kannattaa kirjoittaa ne oman
kotihakemiston alla olevaan matlab-hakemiston tiedostoon
startup.m
Tämä tapahtuu Unix-komennoilla
komennot.m
. Kun tiedoston nimi (ilman m-tarkennetta) kirjoitetaan
Matlab- komentoikkunassa, tulkki suorittaa komennot, aivan kuin ne
kirjoitettaisiin peräkkäin Matlab-istuntoon. Siis >> komennot
(tällöin on vain huolehdittava siitä, että tiedosto on joko työhakemistossa
tai path
) varrella. Komennon path
lisäksi/sijasta on erityisen kätevää omaksua komento
addpath
. Esimerkkejä kohdassa 1.3.2
Vaihtoehtoisesti komennot voidaan koota tekstitiedostoon
doku.txt
tai vaikkapa doku.html. Tällöin tiedostossa olevia komentoja voidaan
leikkaus/liimaus-hiirioperaatiolla siirtää komentoikkunan ja
dokumentin välillä.
script
.
-> Sisällysluetteloon <-
Avustus- ja opastus
Avustusta (kts. Hig s. 24:) on saatavissa komennoilla.
help, helpwin, helpdesk,
lookfor
Tässä oppaassa esiintyvät help
- tyyliset
termit ovat linkkejä siellä olevaan avustusjärjestelmään.
what
antaa listan annetun hakemiston
funktioista
which
etsii hakemiston, jossa kysytty funktio
sijaitsee. (Hyödyllinen erityisesti, kun polun varrella on
useita samannimisiä funktioita.)
lookfor
etsii funktiota, jonka nimessä esiintyy
annettu merkkijono. (Voi aiheuttaa paljon tulostusta ja viedä
aikaa.)
Työtila
(Kts. doc -> getting started -> The Matlab environment )
Työtila (workspace) on Matlab-komentotilasta hallittavissa oleva alue
tietokoneen muistissa. who - muuttujien nimet
whos - lisäksi koko- ja talletusinformaatio
clear - työtilan muuttujien vapauttaminen arvoistaan
why - vaikkapa elämän tarkoitukseen liittyvät kysymykset
Komennon keskeytys : CTRL-C
(Tyypillinen tilanne: suurta
matriisia käsittelevä komento unohdetaan päättää tulostuksen estävään
puolipisteeseen (Kantapään kautta opitaan pian.).)
-> Sisällysluetteloon <-
1.2 Vektorit ja matriisit
Kertaamme ja täydennämme edellä esiteltyjä asioita.
1.2.1 Matriisien muodostaminen ja alkioiden poiminta
Aloitetaan muodostamalla 3 x 3-matriisi A:
>> A = [1 2 3; 4 5 6; 7 8 9]
Sama matriisi voitaisiin siten
kirjoittaa vaikkapa näin:
>> A = [1 2 3;
4 5 6;
7 8 9];
Tässä päätimme komennon puolipisteeseen, joten Matlab-tulkki ei tulosta
ruudulle matriisin A
sisältöä. Otamme pienen esimerkki-istunnon
vektoreista.
>> format compact % Tulostusasua säätelevä komento.
>> v=[1 2 3 4 5] % v=[1,2,3,4,5] % Pilkut käyvät myös.
v =
1 2 3 4 5
>> v=1:5; % Sama vektori saadaan kätevämmin näin.
%
help colon
(lähemmin kohdassa 2.2.1 )
>> vt=v' % Transponoidaan pystyvektoriksi.
vt =
1
2
3
4
5
>> [1;2;3;4;5] % Pystyvektori voidaan luoda myös suoraan.
ans = % Tässä emme sijoita sitä arvoksi millekään
1 % muuttujalle. Matlab antaa sille nimen ans,
2 % johon voidaan viitata, kuten mihin tahansa
3 % muuttujaan. Tämä pätee vain viimeksi suoritettuun
4 % komentoon. (Vrt. Maplen %)
5
Matriisin alkion poiminta
Matiisin A alkio ai,j poimitaan
kirjoittamalla A(i,j)
. Sille voidaan myös sijoittaa uusi arvo
komentamalla esimerkiksi >> A(2,3)=-10
>> A=reshape(1:12,4,3) % Kätevä tapa muotoilla vektorista matriisi.
>> A(:) % Jonoutus sarakkeittain.
-> Sisällysluetteloon <-
1.2.2 Vektorilausekkeita, kuvaajan piirto
Esimerkkinä vektoreilla operoinnista tarkastelemme yhden muuttujan
funktion kuvaajaan liittyvän datan muodostamista ja piirtoa.
Tarvitsemme
Piirtoesimerkki
>> x=[0 0.25 0.5 0.75 1] % Havainnollisuuden vuoksi harva pisteistö.
x =
0 0.2500 0.5000 0.7500 1.0000
>> y=sin(2*pi*x) % sin-funktio operoi jokaiseen x-vektorin
% komponenttiin
y =
0 1.0000 0.0000 -1.0000 -0.0000
>> [x' y'] % Pisteparien taulukko saadaan laittamalla pystyyn
% transponoidut vektorit vierekkäin 2-sarakkeiseksi
% matriisiksi.(Tämä vain asian havainnollistamiseksi)
ans =
0 0
0.2500 1.0000
0.5000 0.0000
0.7500 -1.0000
1.0000 -0.0000
>> plot(x,y) % Yhdistetään edellä olevat (x,y)-parit murtoviivalla.
Jako 4:ään osaväliin Jako 29:ään osaväliin
>> x=linspace(0,1,30); y=sin(2*pi*x); plot(x,y)
Operoidessamme vektorilausekkeilla, on totuttava käyttämään pistettä
laskutoimitusmerkin edessä, kun on kyseesä kerto- tai jakolasku tai potenssiin
korotus. Katso laskutoimitukset tästä. .
Esimerkiksi:
>> x=linspace(-pi/2,pi/2);
>> y=x.^2; % Kukin vektorin komponentti toiseen potenssiin
>> z=x.*sin(x); % Vektorit x ja sin(x) kerrotaan "pisteittän"
>> plot(x,y,x,z)
-> Sisällysluetteloon <-
1.2.3 Matriisiesimerkki, lineaarinen yhtälösysteemi
Muodostamme jonkin sopivan pienen ei-singulaarisen matriisin, sen
käänteismatriisin ja ratkaisemme lineaarisen yhtälösysteemin.
Huomaamme samalla, että kertomerkki ( * ) on varattu matriisikertolaskulle, niinpä edellä mainittu "pisteittäinen" kertolasku vaatii
pisteen. (Kuullostaa itsestään selvältä !)
>> A=vander([1 2 3]) % Vandermonden matriisi on ei-singulaarinen,
% Matlabissa on valmis funktio sen muodostamiseen.
>> B=inv(A)
>> A*B % Katsotaan, onko B tosiaan käänteismatriisi.
>> A*B-eye(size(A)) % Yleisemmin voidaan samuutta testata näin.
>> b=[1;1;1] % Haluamme ratkaista systeemin A*x = b .
>> x=B*b % Kerrotaan käänteismatriisilla.
>> x=A\b % Tehokkaampi tapa on käyttää \-operaatiota.
% Muistisääntö: "matriisijako, jossa jakajamatriisi
% on jakoviivan alla.
Muistatko, missä yhteydessä johduttiin Vandermonden matriisiin?
-> Sisällysluetteloon <-
1.2.4. Esimerkkejä Matlabin funktiosta
Matlab on funktionaalinen
ohjelmointikieli, sen "voimanlähteenä" on suuri joukko funktioita, jotka
operoivat yleensä suoraan vektori- ja/tai matriisiargumentteihin. Ohjelmointi
tarkoittaa sitä, että käyttäjä kirjoittaa omia funktioitaan laajentaen siten
Matlabin valmista funktiokokoelmaa.
>> x=linspace(0,5,10)
x =
Columns 1 through 7
0 0.5556 1.1111 1.6667 2.2222 2.7778 3.3333
Columns 8 through 10
3.8889 4.4444 5.0000
>> y=log(x) % log on luonnollinen logaritmi
Warning: Log of zero.
y =
Columns 1 through 7
-Inf -0.5878 0.1054 0.5108 0.7985 1.0217 1.2040
Columns 8 through 10
1.3581 1.4917 1.6094
2.5. Tehtäviä
Tehtävä 1
-> Sisällysluetteloon <-
1.3 Matlab työskentely-ympäristö
Ennen vakavamieliseen toimintaan ryhtymistä on syytä omaksua
kestävällä pohjalla oleva työskentelytapa.
1.3.1 Työn dokumentointi, komentotiedosto, diary
Kuten jo edellä esitimme,
Matlab työskentely kannattaa tehdä pitämällä editori-ikkunaa erikseen
auki. Käytettäessä graafista liittymää, luonnollinen on Matlabin oma
tekstieditori.
Työtapa 1
Työtapa 2
Toki tässäkin tavassa on välillä kätevämpää käyttää leikkaus/liimaus-tekniikkaa.
Työtapa 3
>> diary doku % Avataan tiedosto doku
>> A=eye(10) % Matlab-komennot ja tulosteet kirjoittuvat
>> mesh(A) % doku-tiedostoon
>> diary % Suljetaan tiedosto
>> type doku % Katsotaan, tuliko mitään
Jos halutaan antaa nimeksi vaikkapa doku.txt , on komennettava
>> diary 'doku.txt', type 'doku.txt'
Vastaavasti load 'tiedosto.txt' lataa ne työtilaan levyltä.
-> Sisällysluetteloon <-
1.3.2. Polun asettaminen, alustustoimet
Matlab-istunnossa voi antaa joitakin Unix/Dos-komentoja sellaisenaan, kuten
pwd, cd, dir.
Matlab löytää .m-tiedostoja matlabpath
:n varrelta. Kätevintä on antaa
komentoja tyyliin:
>> addpath /p/edu/mat-1.414/matlab/
>> addpath /p/edu/mat-1.414/matlab/laode/
Nämä olivat aikanaan tarpeen TKK:n ns. V-peruskursseilla.
Komentojen antamisen jälkeen ko. kurssihakemistoihin
sijoitetut m-tiedostot ovat suoraan käytettävissä.
(Ollaan käyttöjärjestelmäikkunassa.)
> cd % Kotihakemistoon
> mkdir matlab % Luodaan matlab-hakemisto (ellei ole jo)
> emacs matlab/startup.m &
%Kirjoitetaan editoriin ainakin rivit (jos ollaan V3-kurssilla):
addpath /p/edu/mat-1.414/matlab/
addpath /p/edu/mat-1.414/matlab/laode/
Tässä on tyypillinen aloitustehtävä kurssilla, tässä vanha V3-kurssi.
Tehtävä:
Tee tämä ja heti!
-> Sisällysluetteloon <-