Introduktion till MATLAB
Föreläsning 1
FY021G Ingenjörsvetenskap
[email protected]
Reviderad 2007-09-23
1
Dagens agenda
•
•
•
•
•
•
MATLAB - vad ska det vara bra för?
Arrayer, matriser och vektorer
Manipulation av arrayer
Matematiska arrayoperationer
Villkor
Slingor
2
Examination
• En enkel dugga (kort prov, ca 20 minuter) inleder
labbtillfället
• Duggans uppgifter har liknande karaktär som
dokumentet ”Introduction to the MATLAB language –
examples and exercises”.
• För tillträde till labben krävs 50% godkänt på duggan.
• För VG på labben krävs minst 75% rätt på duggan.
Ligger man strax under gränsen kan en mycket väl
genomförd laboration ”kompensera”.
• G ger 1 poäng och VG 2 poäng bidrag till
poängsiffran som slutbetyget grundar sig på.
3
Förberedelse inför labben
• Förberedelse inför duggan:
– Repetera exemplen i dokumentet ”Examples and
exercises”.
– Repetera denna slide show (publiceras i WebCT i
eftermiddag).
• Läs ev. i läroboken ”Introduction to MATLAB
7”, kap 1 till 6 inför labbtillfället om det som
känns oklart.
• Läs i läroboken kapitel 8.2-8.3, om
regressionsanalys
• MATLAB finns i PC-labbsalarna om du redan
nu vill testa.
4
Vad är MATLAB?
• MATrix LABoratory
• En avancerad och programmerbar
”miniräknare”
• Hanterar bl.a. vektor- och matrisalgebra,
samt komplexa tal.
• Utvecklades i slutet av 70-talet.
• Idag vanligt inom forskning och utveckling,
främst för
– numeriska beräkningar, och
– visualiering av data med diagram
5
Tillämpningsområden
• Grafisk visualisering av data
• Numerisk analys
• Interpolation, extrapolation,
regressionsanalys
(i denna kurs)
• Statistik
• Optimering
• Datorsimulering
• Signalbehandling
• Styr- och reglerteknik
• Kommunikationssystem
• Bildbehandling
• M.m.
6
Hur MATLAB står sig i en
jämförelse…
•
Fördelar:
–
–
–
–
–
•
Många toolboxar (funktionsbibliotek) finns utvecklade för olika tekniska
specialområden.
Vanligt förekommande i forskningsvärlden
Kan både användas som kommandostyrd ”miniräknare” och programmeras
Enkelt, dynamiskt typat, programmeringsspråk
Kompakt programmeringsspråk
Alternativ till MATLAB:
–
Hårt typade programmeringsspråk såsom FORTRAN, C, C++ och Java ger snabbare
beräkningar
•
–
–
GNU Octave, som har öppen källkod, och är delvis kompatibelt
MathCAD, Maple och Mathematica är bättre på symboliska (icke-numeriska)
beräkningar
•
–
–
FORTRAN (utvecklades på 50-talet) hade förr större funktionsbibliotek
MathCAD har ett icke-kommandobaserat användargränssnitt, ett slags ”kalkylblad för
matematiker”
Kalkylbladsprogram såsom Excel används och är mer utbredda, men mycket mer
begränsade.
Avancerade miniräknare
7
Så här ser MATLAB ut
Workspace:
Variabellista
Command
history
Command window:
Här skriver du in kommandon
8
Fler MATLAB-fönster som kan öppnas
Figure window
Array editor
M-file editor
9
Hur får man hjälp?
help
funktionsnamn
Visar oformaterad text
i kommandofönstret
doc funktionsnamn
Visar HTML-dokumentation
i en särskild browser.
10

Operationer i MATLAB
Matematisk notation MATLAB-syntax
3
2 4  6
8
144
3
2*4+3/8-6
sqrt(144)
2^3
2
e 0.5
exp(.5)
11
Logaritmer
ln( 2.79)
log(2.79)
log(1000)
log10(1000)
log 2 (1024)
log2(1024)
12
Trigonometriska funktioner
Matematisk notation MATLAB-syntax

sin( )
2
cos( )

tan( )
4

cot( )
4
asin(1)
sin(pi/2)
cos(pi)
tan(pi/4)
cot(pi/4)
asin(1)
13
Dynamiskt typade variabler
• En variabel är en del av datorns arbetsminne
• MATLABs variabler kallas Arrayer, vilket betyder
att de kan bestå av flera element (flera värden)
• MATLAB har dynamiskt typade arrayer, vilket
innebär:
– Första gången man tilldelar en array ett värde så
definieras den, dvs det skapas en plats i datorns minne
för variabeln.
• Exempel: minVariabel = 1
– Arrayerna kan automatiskt ändra storlek, utan att
särskilda deklarationskommandon krävs
• Exempel: minVariabel = [ 1 3 7 ] % minVariabel utökas till
en radvektor bestående av 3 element
14
Base Workspace
• Base Workspace är de variabler som är
åtkomliga från kommandofönstret
• Så fort man definierar en variabel så visas
den i delfönstret Workspace
• Radera alla variabler ur base workspace
med:
clear
15
Val av variabelnamn
• MATLAB skiljer mellan versaler och gemener,
alltså variabeln area är inte samma som
variabeln Area
• Ord som används till annat är olämpliga som
variabelnamn t.ex: ans, pi, i, j, plot.
• Första tecknet i variabelnamnet måste vara
en bokstav
• Övriga tecken kan vara siffror eller
understreck _.
• Svenska tecknen Å, Ä, Ö kan inte användas.
16
Skalär, vektor och matris
• En skalär är en array av storleken 1x1, dvs ett
element.
– Exempel: x = 1.
• En vektor av längden N är en-dimensionell array av
storleken 1 x N (radvektor) eller en N x 1
(kolumnvektor).
– Exempel: x = [10 20] är en radvektor av längd 2.
– y = [10;20;30] är en kolumnvektor av längd 3.
• En matris är en tvådimensionell array av storleken N
x M. Skalärer och vektorer är specialfall av matriser.
• En tredimensionsionell array av storlek M x N x L
består av L matriser, var och en av storlek M x N.
• En tom array har noll element.
– Exempel: tom_matris = []
17
Definiera matriser i MATLAB
• [ ] används vid definiering av vektorer och
matriser.
Matematisk notation
2 4 1


9 1 0
2
4
3 1 8
MATLAB-syntax
[2 4 1; 9 -1 0]
[2 4 3 1 8]
18
Mer om matriser
Anta följande matris
[2 3 5; 7 6 1]
Transponering av vektorn
kan man lätt få med hjälp av
transpose operatorn ’
2 3 5


7 6 1
2 7
2 3 5 

 
  3 6
7 6 1 

5 1

[2 3 5; 7 6 1]’
19
Manipulering av matriser
M(4)
11 12 13


M  14 15 16


17
18
19


M(1:4:9)
11 12 13


M  14 15 16


17 18 19
M(2:3,1:2)


11 12 13


M  14 15 16


17
18
19


20
Manipulering av matriser
11 12 13


M  14 15 16


17
18
19


11 12 13


M  14 15 16


17
18
19


11 12 13


M  14 15 16


17
18
19


M(4)=99
M(1:4:9)=[ 36 2]
M(2:3,1:2)=[ 3 6;2 4]
11 99 13


M  14 15 16


17 18 19
 3 12 13


M  14 6 16


17 18 2 
11 12 13


M  3 6 16


2 4 19
21
Multiplikation och addition med skalär
Exempel:
[1 2;3 4] * 0
resulterar i
ans =
0
0
0
0
Exempel:
[1 2;3 4] + 10
resulterar i
ans =
11
12
13
14
”Snygga” MATLAB-program utnyttjar denna
typ av arrayoperationer istället för slingor
(loopar). Det ger kompakta och ofta mer
lättöverskådliga och snabba program.
22
Inre vektorprodukt
Radvektor * Kolumnvektor = Skalär
Vektorerna måste ha samma längd, annars ”Error”
Exempel:
[1 2 3]*[10; 0; 20]
resulterar i 1 · 10 + 2 · 0 + 20 · 3 = 70
Matematisk definition:
 a1
a2
aN 
 b1 
  N
 b2   a b  a b  a b 
k k
1 1
2 2
  
k 1
 
 bN 
 a N bN
23
Yttre vektorprodukt
Kolumnvektor av längd M * Radvektor av längd N
= Matris av storlek M x N
Kompakt notation för alla tänkbara produktkombinationer av elementen
Exempel:
[10; 20] * [1 2 3]
resulterar i
 10 1 10  2 10  3   10 20 30 



20

1
20

2
20

3
20
40
60

 

Matematisk definition:
 a1

 a2


 aM


 b b
 1 2


 a1b1

ab
bN    2 1


 aM b1
a1b2
a2b2
aM b2
a1bN 

a2bN 


aM bN 
24

Matrismultiplikation
1 3
1 3 2
 1 18

0 1  

5 4 0
 5 19
0 6
Så här skriver man ovanstående i MATLAB:
[1 3 2; 5 4 0] * [1 3; 0 1; 0 6]
Kombination av inre och yttre produkt.
Antal kolumner i första matrisen måste vara lika med
antal rader i den andra. Annars Error.
Hur man räknar ut? Vänta till kursen Linjär algebra.
Visar detta enbart som varning för operatorn * .
25
Andra elementvisa arrayoperationer
Varning: På samma sätt som * så resulterar / och ^
applicerade på arrayer inte i ”vanlig” operationer, utan
i vektor- och matrisoperationer enligt definitioner som
ni får lära er i kursen Linjär Algebra.
./ ger elementvis division. Ex: 1 ./ [2 4] ger [0.5 0.25]
.^ ger elementvis upphöjt till. Ex: [2 3] .^ 2 ger [4 9].
Tag därför för vana att sätta en punkt före * / och ^ .
+ och – hanterar elementvisa arrayoperationer, och
behöver inte någon punkt.
26
För fler exempel
Se dokumentet ”Introduction to
MATLAB language: Examples and
exercises”.
27
Kommentarer i MATLAB
• I MATLAB är allt som står till höger om
tecknet % på en rad kommentarer, dvs
anteckningar som inte påverkar hur
programmet körs.
• Det är en god vana att skriva rikligt med
kommentarer.
• Kommentarer kan underlätta för andra att
förstå tanken bakom koden.
• Kommentarer kan också utgöra ett
minnesstöd – man glömmer lätt hur man en
gång tänkt.
28
Villkor – if-satser
• Man behöver ofta göra selektion, dvs val av vad som ska
utföras beroende på ett logiskt villkor.
price=input('What is the price of the book? ');
if price >= 135
disp('very expensive but')
end
disp(['I buy one copy of the book.'])
• disp betyder display, dvs visa texten.
• Apostrofer omger textsträngar, som är vektorer
bestående av alfanumeriska tecken.
29
If - syntax
if villkor
sats
sats
end
if villkor
sats
sats
else
sats
end
if villkor1
sats
elseif villkor2
sats
end
”Elseif” besparar
ett ”end”
30
Relationsoperatorer och logiska
operatorer
•
•
•
•
•
•
•
•
•
"<" - mindre än
"<=" – mindre än eller lika med
">" - större än
">=" – större än eller lika med
"==" – test om lika med ("=" betyder
tilldelning)
"~=" - not equal to
"&" - AND
"|" - OR
"~" - NOT
31
Exempel på if-else
• I vissa lösningar behöver man ibland skriva ett
programmet där ett val måste göras beroende på ett
villkor uppfylls eller inte.
age = input(’How old are you? ') ;
if age >= 20,
disp(’Welcome to systembolaget')
else
d = 20-age;
disp([’Sorry.’]
disp([’You must wait ' int2str(d) ' years'])
end
• Semikolon i slutet av en sats undertrycker utskrift.
• Funktionen int2str(d) omvandlar heltalet d till en
teckensträng.
32
Switch - Case
if x == värde1
sats A
elseif x == värde2… Ger samma
resultat som:
| x == värde 3
sats B
else
sats C
end
switch x
case värde1
sats A
case {värde2,värde3}
sats B
otherwise
sats C
end
33
Iteration - slingor
• Om man vill upprepa något flera gånger
använder man sig av en s.k. iteration
eller slinga (loop på engelska)
• Det finns två typer av slingor i MATLAB:
– for
– while
34
Slingor - syntax
• While-sats
while logiskt_uttryck
sats
sats
end
• For-sats
for variabel = vektor,
sats
sats
end
35
Exempel på for-slinga
Matematisk notation:
xk  k 2 , för alla k  1, 2, 3
Utskrift:
x =
1
x =
MATLAB-kommandon:
for k=1:3
x(k)= k^2
end
1
4
1
4
x =
9
36
För fler exempel
Se dokumentet ”Introduction to
MATLAB language: Examples and
exercises”.
37