Introduktion till MATLAB
Om laborationen
Ovningarna g˚ar ut p˚a att bekanta sig med MATLAB och se hur man l¨oser olika typer av pro-¨ blem. Arbetet ¨ar sj¨alvst¨andigt. Hoppa ¨over s˚adant ni tycker verkar f¨or l¨att och tveka inte att fr˚aga n¨arvarande handledare om det ¨ar n˚agot ni undrar. Avsnittsh¨anvisningar ¨ar till kursboken, Anv ¨andar- handledning f¨or MATLAB 6. F¨or kommandon, variabelnamn och MATLAB-resultat anv¨ands skrivmaskinsstil. F¨or matematiska variabler och formler anv¨ands kursiv stil.
Grundl ¨aggande information om programmet
Information fr ˚an andra k ¨allor
Dator¨ovning 1 inneh˚aller material som liknar f¨oljande kapitel i kursboken: Kapitel 1–Vad ¨ar MAT- LAB?, Kapitel 2–Att komma ig˚ang.
Titta g¨arna i Appendix A–Snabbreferens f¨or vanliga kommandon och funktioner. Det kan ¨aven vara intressant att titta p˚a Getting started ihelpdesk.
1. Start och avslutning av MATLAB (Avsnitt 2.1)
Starta MATLAB genom ge kommandotmatlabi ett kommandof¨onster. MATLAB startar d˚a ett arbetsf¨onster. Du f˚ar nu bl a upp f¨oljande text:
To get started, select "MATLAB Help" from the Help menu.
>>
Ifall man vill arbeta direkt i kommandof¨onstret ger man kommandot matlab -nodesktop.
Detta kan vara bra om det ¨ar flera personer som delar samma server. Desktopen slukar n¨amligen en del processorkraft ¨aven n¨ar den inte anv¨ands.
Du f˚ar nu bl a upp f¨oljande text:
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, type tour or visit www.mathworks.com.
>>
Teckenkombinationen ”>>”¨ar MATLABs prompter. Den visar att MATLAB ¨ar beredd att ta emot kommandon. I exemplen nedan l˚ater vi promtern vara med. Ett kommando ges efter MATLAB- promtern och utf¨ors d˚a return-tangenten trycks ned.
F¨or att avsluta MATLAB: skrivexitellerquit
Bra att veta redan nu: Vill du avbryta n˚agon k¨orning i MATLAB, men ¨and˚a stanna kvar i MATLAB:
tryckctrl-c.
Det kan vara bra att prova n˚agra av de kommandon som f¨oresl˚as ovan, specielltdemoochtour.
Spara dock detta tills du har tid ¨over.
Introduktion till matriser i MATLAB
MATLAB ¨ar ett s k interpreterande spr˚ak, vilket inneb¨ar att s˚a fort man givit ett kommando, s˚a f˚ar man svar. Man beh¨over dessutom aldrig typdeklarera variabler, utan inf¨or dem n¨ar helst de beh¨ovs.
1. Anv ¨and MATLAB som en enkel r ¨aknedosa
Prova att anv¨anda operatorerna , , , , ˆ samt n˚agon matematisk funktion (Avsnitt 2.5).
Exempel:
>> 2*3 + 4
V¨ardet lagras automatiskt ians(answer) om inget annat variabelnamn anges.
Du kan skapa egna variabler t ex genom att ge f¨oljande kommando:
>> minvar = 2*3 + 10.6
Svaret lagras d˚a i variabeln minvar. Observera att decimalpunkt skall anv¨andas; inte decimal- komma. Notera att svaret fr˚an MATLAB inneh˚aller variabelnamnet som angavs. Variabler anv¨ands direkt i aritmetiska uttryck, detta g¨aller ¨aven variabelnans. Prova att anv¨anda dina variabler men gissa f¨orst svaret:
>> ans + minvar / 2
Prioritetsordningen fungerar precis som man v¨antar sig. Prova att anv¨anda parenteser f¨or att upph¨ava denna:
>> (10 + minvar) / 2
Ge nu kommandot
>> who
s˚a ser du vilka variabler som finns i arbetsarean. F¨or att f˚a mer information om variablerna, skriv
>> whos
den talar ¨aven om vilken storlek variablerna har. Vi skall om en stund skapa ”st¨orre” variabler ¨an den skal¨araminvar. F¨or att f˚a mer information om ett visst kommando i MATLAB, s˚a skriver man
>> help kommando prova nu
>> help who
Prova ¨aven att skriva enbart
>> help
Kommandon som ges utan att avslutas med semikolon, ;, g¨or att MATLAB skriver ut svaret genast.
Om man inte vill ha svaret utskrivet s˚a avslutar man kommandot med ett semikolon. ge nu f¨oljande kommando:
>> minvar2 = 2*3 + 4;
Skriv sedanwhoellerwhosf¨or att se att det faktiskt skapades en variabel i alla fall.
Vill du se v¨ardet avminvar2, s˚a skriv bara variabelns namn:
>> minvar2
Det g˚ar alltid att f˚a reda p˚a en variabels v¨arde genom att skriva dess namn, oavsett hur den skapats.
2. Vektorer i MATLAB (Avsnitt 2.3, Kapitel 4)
Namnet MATLAB kommer ursprungligen fr˚an MATrix LABoratory. Den grundl¨aggande dataty- pen ¨ar en matris, vilket ¨aven kan ses som en slags tabell. (Vi t¨anker oss nu bara tv˚adimensionella matriser). En matris med st rader och st kolonner s¨ags ha storleken . I andra program- meringsmilj¨oer arbetar man med ett tal ˚at g˚angen, men i MATLAB arbetar man allts˚a med hela matriser p˚a ett smidigt och enkelt s¨att.
Om matrisen har storlek s˚a ¨ar det ett vanligt tal (skal¨ar), om den ¨ar av storlek eller
s˚a kallas den f¨or radvektor respektive kolonnvektor. Variabler i MATLAB ¨ar oftast vektorer
och matriser, t ex beh¨ovs vektorer d˚a man skall rita grafen till en funktion . Prova nu f¨oljande:
>> vkol = [ 1; 2; 3; 4 ], vrad = [ 5 6 7 8 ]
Fler variabler kan definieras p˚a samma rad genom att man anv¨ander kommatecken eller semikolon mellan variabeldefinitionerna. F¨or att s¨arskilja element i en kolonnvektor s˚a anv¨ands semikolon, ;.
F¨or att s¨arskilja element i en radvektor s˚a anv¨ands blanktecken, som ovan, eller kommatecken, som nedan:
>> vkol = [ 1; 2; 3; 4 ], vrad = [ 5, 6, 7, 8 ] Skrivwhosf¨or att se vilka variabler du har.
Hur g¨or du f¨or att ¨andra enbart ett element i en vektor? Skriv nu
>> vkol( 2 ) = 2.2 och se vad som h¨ander.
F¨or att skriva ett kommando igen med endast sm˚a ¨andringar kan den bekv¨ame prova att trycka p˚a
-tangenten. Prova detta och ¨andra till
>> vkol( 6 ) = 1
Vektorn ut¨okas och de element som inte specificerades blir nollor.
Vektorer kan ocks˚a skapas med kortkommandon, s k kolon-notation eller med ett kommando som heterlinspace. Prova f¨oljande:
>> vektor = 0:8, vektor2 = 0:0.5:2, vektor2lin = linspace(0,2,5)
Andra¨ linspace(0,2,5)tilllinspace(0,2,10)och j¨amf¨or resultaten. Nu kanske du kan gissa hurlinspacefungerar? Verifiera din gissning genom att se vad hj¨alpen s¨ager
>> help linspace
Om man snabbt vill g¨ora om en radvektor till en kolonnvektor, s˚a kan man transponera den (dvs med apostrof,’). Prova med att skriva
>> nyradvekt = vkol’
3. Matriser i MATLAB (Avsnitt 2.3, Kapitel 4)
Definiera en -matris:
>> A = [ 8 1 6; 3 5 7; 4 9 2 ] eller s˚a h¨ar
>> B = [ 1 2 3 4 5 6
7 8 9];
Raderna i en matris skils ˚at med semikolon, :, eller genom att trycka p˚a return-tangenten. MATLAB ger inget svar innan man avslutat matrisen. Skrivwhosigen nu f¨or att se storleken hos matriserna.
F¨or att komma ˚at endast ett element s˚a indexeras matrisen p˚a samma s¨att som vektorerna. Vad tror du h¨ander nu:
>> B, B(3,1) = A(1,3)
Kommandotsizekan anv¨andas om man vill se storleken p˚a en matris:
>> size(A)
Vill man spara matrisens storlek i tv˚a variablermochns˚a skriver man:
>> [m,n] = size(A)
4. Rita funktioner av typen
!Att rita funktioner av en variabel ¨ar l¨att i MATLAB. Rita t ex #"%$'&()* i intervallet [0, 3+ ].
Skriv f¨oljande:
>> x = 0:3*pi;
>> y = sin( x ); plot( x, y );
Ett nytt f¨onster, s k grafikf¨onster, ¨oppnas. Resultatet blir en kantig graf, eftersom enbart 10 punkter anv¨ands. Skrivlength(x)eller whosf¨or att se l¨angden p˚a vektorernaxoch y. Skalningen av axlar g¨ors automatiskt.
Vi ser h¨ar attsin-funktionen faktiskt kan ha en vektor som argument och returnera motsvarande resultat som en vektor, dvs matematiska funktioner i MATLAB fungerar elementvis p˚a vektorer!
F¨orklara vad som h¨ander om endast, -v¨arden ges (plot(y)).
Prova ¨aven f¨oljande:
>> x2 = linspace(0, 3*pi, 40);
>> y2 = sin( x2 );
>> plot( x, y, ’-’, x2, y2, ’--’ );
Vad h¨ander? Vad ger nu length(x2)? Varf¨or ritas ,.-/"0*1-2 ut i ett st¨orre intervall ¨an ,3"
?
Ena linjen blev streckad genom att vi lade till parametern’--’, mer om linjeformatering finns i tabell 13.1, s260.
L¨agg till ett bakgrundsn¨at med kommandotgrid on.
Man kan ¨aven anv¨anda fplot f¨or att rita funktioner. Den fungerar dock enbart f¨or MATLABs standardfunktioner (somsin(x),cos(x),exp(x),...) samt f¨or egendefinierade funktioner som man skriver sj¨alv och lagrar i s k M-fil.
5. Programmera i MATLAB
Som du s¨akert vet kan man programmera MATLAB p˚a liknande s¨att som t ex C++, dvsfor-loop, while-loop ochif-sats finns.
Naturligtvis, kan man f˚a samma resultat i exemplen ovan med hj¨alp av dessa kontrollstrukturer.
Vi visar tv˚a nya s¨att att skapa vektorer med samma inneh˚all somx2ochy2ovan, men sparar nu v¨ardena ix3,y3samtx4,y4. Skriv f¨oljande:
>> n = 40; x3 = []; y3 = [];
>> i = 1;
>> while i <= n
x3( i ) = 3*pi*( i - 1 )/( n - 1 );
y3( i ) = sin( x3( i ) );
i = i + 1;
end
>> clf; plot( x3, y3 ); grid;
>> n = 40; x4 = []; y4 = [];
>> h = 3*pi/( n - 1);
>> for xx = 0:h:3*pi x4 = [ x4 xx ];
y4 = [ y4 sin( xx ) ];
end
>> clf; plot( x4, y4 ); grid;
Kolla att resultatet blir lika med:
>> max( abs( x2 - x3 ) ), max( abs( y2 - y3 ) ) och p˚a samma s¨att f¨orx4ochy4.
Som du ser s˚a finns flera s¨att att skapa och bygga upp vektorer. Om m¨ojligt s˚a skall man dock v¨alja kortkommandon (kolon-notation och linspace), eftersom det ger l¨attl¨ast kod och dessutom ¨ar mycket snabbare ¨an med vanlig loop!
Nu skall vi skapa en st¨orre matris som best˚ar av 10000 reella tal organiserade i 100 rader och 100 kolumner. Vi skriver h¨ar alla kommandon p˚a samma kommandorad genom att skilja satser ˚at med semikolon eller kommatecken. Ge f¨oljande kommando:
>> clear A
>> A = zeros( 100, 100 );
>> for i=1:100, for j=1:100, A(i,j)=sin(i/10)*sin(j/10); end, end
>> mesh( A )
Kommandot clear A; “suddar” ut variabeln A fr˚an MATLABs minne. Om man bara skriver clear“suddas” alla tidigare definierade variabler ut fr˚an minnet.
Kommandotzeros(N,M)skapar en nollmatris av storlek456 , dvs en matris med bara nollor.
P˚a motsvarande s¨att f˚as ettmatrisen med kommandotones, enhetsmatrisen med kommandoteye och en slumptalsmatris med kommandotrand.
Kommandotmeshritar upp matrisenAsom en graf i ett grafikf¨onster.
Semikolon, “;”, efter tilldelning av element till matrisen A undertrycker utskriften. Om du inte hade givit semikolon, s˚a hade du f˚att en f¨orf¨arlig massa utskrifter. Prova genom att ge f¨oljande kommando:
>> for i=1:5, for j=1:5, A(i,j) = sin(i/10)*sin(j/10), end, end Om man skriverend; end; d¨aremot, s˚a f˚ar man samma resultat, dvs semikolon efterend har ingen verkan p˚a utskrifter i motsvarande loop.
Forts¨att nu att prova n˚agra andra kommandon f¨or att visualisera matrisenA. Skriv
>> clf; surf( A ); colormap( jet ); colorbar;
Forts¨att sedan med
>> shading flat;
Prova ¨aven n˚agra kombinationer av f¨oljande kommandon:
surf,surfc,surfl,
shading flat,shading interp,
colormap( jet ),colormap( bone ),colormap( prism ).
F¨or mer information om f¨argskalor och 3D grafik, skrivhelp graph3d.
6. Lokal arbetskatalog
F¨or kommande ¨ovningar beh¨over du skapa en arbetskatalog. Skapa en d¨ar en katalog med namnet
”matlab02”. Det g¨or du genom att ge kommandotmkdir matlab02i ett kommandof¨onster. G˚a ner i katalogen genom kommandot cd matlab och ta reda p˚a s¨okv¨agen dit med kommandot pwd.
Skriv sedan i MATLAB
>> addpath s¨okv¨ag
Det g˚ar ¨aven att g˚a in under ”Set path” i File-menyn om du anv¨ander desktopen. Spara forts¨attningsvis alla filer du skapar i denna katalog.
F¨or att ¨andra aktiv katalog till din nyskapade katalog skriver du
>> cd s¨okv¨ag
7. Spara bilder
Kommandotprintanv¨ands f¨or att spara en ritad bild eller ta ut den p˚a papper. Skriv
>> help print
f¨or att se vilka format man kan spara bilden i.
Det ¨ar vanligt att man inte hinner l¨asa all text som fladdrar f¨orbi, prova igen
>> more on
>> help print
d˚a skrivs bara en liten del i taget ut p˚a sk¨armen. Man trycker return f¨or att forts¨atta utskriften eller
”qf¨or att avsluta den.
Om du ger f¨oljande:
>> print -djpeg bildnamn
s˚a sparas grafen som en bild p˚a filenbildnamn.jpg.
Man kan ¨aven anv¨anda menyerna i grafikf¨onstret f¨or att spara bilden p˚a en fil. V¨alj File-menyn och sedan ”Export”. Bl¨adderlistan ”Save as type”visar ett antal format.
I PC-milj¨o g˚ar det att skriva ut genom att g˚a in i grafikf¨onstrets File-meny och v¨alja print.
8. Generering av funktionstabeller
Om man ist¨allet vill ha en funktionstabell f¨or en funktion, t ex ,7"8 - , s˚a kan man s¨atta ihop de vektorer man har till en matris:
>> x = 0:10;
>> y = x.ˆ2;
>> funktionstabell = [ x; y ]’
H¨ar ser vi en s k elementvis operation.x.ˆ2 inneb¨ar att varje element i xkvadreras och svaret blir en vektor av samma l¨angd som x. Punkten anges f¨or att skilja elementvisa operationer fr˚an s k matrisoperationer. Matrisalgebra kommer senare i kursen men finns ¨aven ¨oversiktligt beskrivet i Appendix B.
9. Att ladda och spara data (Avsnitt 2.7)
F¨or att spara numeriska resultat p˚a en fil anv¨ands kommandotsave. Om det anropas utan paramet- rar lagras samtliga variabler i arbetsarean. Det ¨ar vanligt att andra program skall kunna l¨asa filen, d˚a ger man parametern-ASCIIvilket skapar en textfil ist¨allet f¨or en bin¨arfil.
Prova att lagra en variabel i en bin¨arfil:
>> x = rand(10);
>> save minvar.mat x
Filenminvar.matinneh˚aller nu variabelnx.
Det g˚ar nu att l¨asa in variabeln
>> clear
>> load minvar.mat
>> x
N¨ar data lagras i ASCII-format s˚a sparas inte variabelnamnet. D˚a en matris inl¨ases fr˚an textfil f˚ar variabeln samma namn som filen.
F¨or att l¨asa in datafiler som ¨ar av ostrukturerad karakt¨ar finns kommandon fread, fscanf, fgetl, etc.
M-filer: Kommandofiler och funktionsfiler (Avsnitt 2.8)
N¨ar man b¨orjar beh¨arska MATLAB lite mer och man beh¨over m˚anga kommandon f¨or att l¨osa ett problem, s˚a ¨ar det klokt att spara dessa i en s k M-fil, dvs filer som har suffix ”.m”.
Det finns tv˚a sorters M-filer, dels kommandofiler och dels funktionsfiler. En funktionsfil m˚aste inneh˚alla en funktion som man definierar sj¨alv med kommandotfunction.
En M-fil exekveras (k¨ors) d˚a man skriver filens namn (utan suffixet) n¨ar man ¨ar i kommandof¨onstret i MATLAB.
Filen kan utnyttja redan definierade variabler, men kan ¨aven l¨asa in fr˚an tangentbord och skriva ut p˚a sk¨armen.
Du skall nu f˚a provk¨ora n˚agra M-filer som redan ¨ar f¨ardiga. H¨amta hem f¨oljande filer fr˚an kurs- hemsidan
http://www.tdb.uu.se/edu/course/homepage/tdbDV1/
ritafunk.m sork.m
surprise1.m aritmetikspel1.m surprise2.m aritmetikspel2.m Testk¨or, svara p˚a eventuella fr˚agor och njut av resultaten!
Nu skall du f˚a skriva en egen liten kommandofil. ¨Oppna en editor, t ex xemacs i ett terminalf¨onster eller genom att i MATLAB skriva:
>> edit
Editorn edit fungerar ungef¨ar som ett Word-dokument, t ex kan man klippa och klistra textrader.
Man skriver in det man vill programmet skall g¨ora i editorn, g¨arna snyggt och prydligt (rad-f¨or rad), s˚a det ¨ar l¨attl¨ast f¨or andra.
Kommentarer inleds med %-tecken. Programmet utf¨or kommandona i den ordning som de st˚ar i filen. Om n˚agon kommandorad ¨ar f¨or l˚ang s˚a skriver man tre punkter, ..., sist p˚a den rad som m˚aste avbrytas, t ex
texten = [ ’Hej och v¨alkommen till ett roligt program! ’,...
’Vi hoppas att du skall tycka om MATLAB.’ ];
disp( texten );
Skriv nu:
% Mitt f¨orsta program.
% ex1.m
disp(’Hej!’);
x = input(’Ge ett tal: ’ );
y = input(’Ge ett till tal: ’ );
sum = x + y;
disp(’Summan av talen blir:’);
sum % prova ¨aven med disp(sum) h¨ar
Spara programmet somex1.m(i edit antingen i File-menyn, med diskett-symbolen eller snabbast medctrl-s).
Flytta muspekaren till kommandof¨onstret och skriv
>> ex1
d˚a k¨ors ditt program! H¨ar visas ¨aven att inl¨asning fr˚an tangentbord sker medinputoch utskrift p˚a sk¨arm meddisp. Nu kan du ¨andra lite i editorn, t ex provadisp(sum)ist¨allet. Kom ih˚ag att spara nya versionen innan du provar att k¨ora det modifierade programmet.
Nu ska du f˚a skriva en egen funktion och spara den p˚af.m
Oppna nytt f¨onster i din editor (i edit File - New) och skriv in f¨oljande:¨
function y = f( x )
% MATLAB-funktion som returnerar v¨ardet
% av en matematisk funktion
% f.m
y = x.*x - sin(x) + 5;
Spara somf.m. Nu kan du i kommandof¨onstret skriva f¨oljande:
>> v = linspace(0,2*pi);
>> w = f(v);
>> clf;
>> plot( v, w );
Eller, ¨annu snyggare:
Oppna en ny fil,¨ ex2.m, i vilken du l¨agger in dessa kommandon och modifierar s˚a att anv¨andaren kan ge intervallet som funktionen skall ritas i:
% Ex2.m
% Lek med funktioner.
disp(’Program som ritar en specialfunktion i intervallet [a,b]’);
a = input(’Ge a: ’ );
b = input(’Ge b: ’ );
v = linspace(a,b);
w = f(v);
clf;
plot( v, w ); % Testa ¨aven med area(v, w)...
Sedan k¨or du programmet med
>> ex2
Om du vill se vilka filer du har i din aktuella katalog, s˚a skriv
>> dir
Inneh˚allet i en M-fil kan du f˚a med kommandottype, prova
>> type ex2
>> type plotyy
Andra katalogkommandon finner du i Avsnitt 16.3.
Skriv nu
>> help ex1 samt
>> help f
Vad h¨ander?
Vi n¨amnde ovan att man kan spara en MATLAB-session med kommandotdiary. Man kan ˚ater- anv¨anda kommandona om man editerardiary-filen och d¨oper om den s˚a det blir en M-fil. Skriv:
>> diary matrisen clear;
n = 5
A = magic(n);
n = 10
A = magic(n);
clf;
subplot(2,1,1);
surf(A);
subplot(2,1,2);
mesh(A);
>> diary off
Modifiera filenmatrisenmed din editor och kalla denmatrisen.m Nu kan du testk¨ora ditt nya program genom att ge
>> matrisen
Demonstrationsexempel och information om MATLAB
F¨or att f˚a hj¨alp i MATLAB s˚a kan man t ex anv¨anda
helpdesk,helpellerhelpwin
F¨or demonstration av MATLAB, SIMULINK och s k toolboxar (Communications, Control System, Financial, Higher-Order Spectral Analysis, System identification, Image Processing,...) prova nu demo-kommandot:
>> demo
och v¨alj sedan ¨onskad demonstration. Ibland medf¨or en demonstration att motsvarande MATLAB- kommandon skrivs ut i kommandof¨onstret. Vill du avbryta, s˚a tryckctrl-c.
10. Allm ¨an information om MATLAB-produkter
F¨or att f˚a information om ˚aterf¨ors¨aljare, b¨ocker etc som har med MATLAB att g¨ora s˚a kan man f˚a stor hj¨alp av MathWorks hemsidor.
Oppna din internetbl¨addrare (t ex Netscape eller Explorer) och ge URL:¨
http://www.mathworks.com/
Se ¨aven
http://www.mathworks.com/products/
Vilka MATLAB-b¨ocker finns? Se t ex under
http://www.mathworks.com/support/books/
och klicka p˚a General.
Information om MATLAB 6-boken finns p˚a f¨oljande URL
http://www.tdb.uu.se/9 matlab
11. Till ¨ampningar d ¨ar MATLAB anv ¨ants (Avsnitt 1.1)
Ge kommandot
>> tour
v¨alj MATLAB In Industry”. Bl a kan man se h¨ar att Forskmarks kraftstation och SAAB Military aircraft bygger sina simuleringsmodeller i MATLAB. Samma information kan erh˚allas p˚a:
http://www.mathworks.com/industry/