introduktion till matlab föreläsning 1
TRANSCRIPT
2
Dagens agenda
• MATLAB- vad ska det vara bra för?• Arrayer, matriser och vektorer• Manipulation av arrayer• Kompakta arrayoperationer• Slingor
3
Dugga och labb• En enkel dugga (kort prov, ca 20 minuter) ges i
början av första labtillfä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, VG ger 2 poäng bidrag till poängsiffran för kursens slutbetyg.
4
Förberedelse inför labben• Förberedelse inför duggan och labb 1:
– Repetera exemplen i ovanstående dokument. – 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älle 1 om det som känns oklart.
• Matlab finns i PC-labbsalarna om du redan nu vill testa.
• Inför labbtillfälle 2, läs i läroboken kapitel 8.2-8.3, om regressionsanalys
5
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
6
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.
7
Hur Matlab står sig i en jämförelse…
• Fördelar: – Enkelt, dynamiskt typat, programmeringsspråk– Kan både användas som ”miniräknare” och programmeras– Många toolboxar (funktionsbibliotek) finns utvecklade.– Mycket utbredd
• Alternativ till MATLAB:– Hårt typade programmeringsspråk såsom FORTRAN, C, C++ och Java ger
snabbare beräkningar• FORTRAN (utvecklades på 50-talet) hade förr större funktionsbibliotek
– GNU Octave, som har öppen källkod, och är delvis kompatibelt– MathCAD, Maple och Mathematica är bättre på symboliska (icke-
numeriska) beräkningar• 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
8
Command window:Här skriver du in kommandonWorkspace:
Variabellista
Commandhistory
Så här ser Matlab ut
10
Hur får man hjälp?helpfunktionsnamn
Visar oformaterad text i kommandofönstret
doc funktionsnamn
Visar HTML-dokumentationi en särskild browser.
11
Operationer i Matlab
2^3
sqrt(144)
2*4+3/8-6
MatlabsyntaxMatematisk notation
2 × 4 +38
− 6
144
32
13
Trigonometriska funktioner
sin(pi/2)
cos(pi)
tan(pi/4)
cot(pi/4)
asin(1)
sin(π2
)
cos(π )
tan(π4
)
cot(π4
)
asin(1)
Matlab syntaxMatematisk notation
14
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 är nu en
radvektor bestående av 3 element
15
Workspace• 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 workspace med: clear
16
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 alltid vara en bokstav, inga siffror eller specialtecken som $,@,€,… får användas.
• Svenska tecknen Å,Ä,Å kan inte användas.
17
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 storleken 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 = []
18
Definiera matriser i matlab• [ ] används vid definiering av vektorer och
matriser.
2 4 19 −1 0
⎛
⎝ ⎜
⎞
⎠ ⎟
2 4 3 1 8( )
[2 4 1; 9 -1 0]
[2 3 3 1 8]
Matematisk notation Matlabsyntax
19
Mer om matriser
2 3 57 6 1
⎛
⎝ ⎜
⎞
⎠ ⎟
Anta följande matris [2 3 5; 7 6 1]Transponering av vektornkan man lätt få med hjälp avtranspose operatorn ’
[2 3 5; 7 6 1]’2 3 57 6 1
⎛
⎝ ⎜
⎞
⎠ ⎟
Τ
≡2 73 65 1
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
20
Manipulering av matriser
M(4)
M(1:4:9)
M(2:3,1:2)
M =11 12 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =11 12 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =11 12 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
21
Manipulering av matriserM(4)=99
M(1:4:9)=[ 3 6 2]
M(2:3,1:2)=[ 3 6 ;2 4]
M =11 12 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =11 99 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =3 12 13
14 6 1617 18 2
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =11 12 133 6 162 4 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =11 12 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
M =11 12 1314 15 1617 18 19
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
22
Multiplikation och addition med skalär
Exempel: [1 2;3 4] * 0
resulterar i ans =
0 00 0
Exempel: [1 2;3 4] + 10
resulterar i ans =
10 2030 40
”Snygga” MATLAB-program utnyttjar arrayoperationer istället för slingor (loopar). Det ger kompakta och ofta mer lättöverskådliga och snabba program.
23
Inre vektorproduktRadvektor * Kolumnvektor = SkalärVektorerna 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:
( )
1
21 2 1 1 2 2
1
N
N k k N Nk
N
bb
a a a a b a b a b a b
b=
⎛ ⎞⎜ ⎟⎜ ⎟ = = + + +⎜ ⎟⎜ ⎟⎝ ⎠
∑i
24
Yttre vektorproduktKolumnvektor av längd N * Radvektor av längd M
= Matris av storlek M x NKompakt notation för alla tänkbara produkt-kombinationer av elementenExempel: [10; 20]*[1 2 3]
resulterar i
Matematisk definition:
( )
1 1 1 1 2 1 4
2 2 1 2 2 2 41 2
1 2
N
N N N N N
a a b a b a ba a b a b a b
b b b
a a b a b a b
⎛ ⎞ ⎛ ⎞⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟=⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠
i
10 1 10 2 10 3 10 20 3020 1 20 2 20 3 20 40 60
⋅ ⋅ ⋅⎛ ⎞ ⎛ ⎞=⎜ ⎟ ⎜ ⎟⋅ ⋅ ⋅⎝ ⎠ ⎝ ⎠
25
Matrismultiplikation
1 3 25 4 0
⎛
⎝ ⎜
⎞
⎠ ⎟
1 30 10 6
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ =
1 185 19
⎛
⎝ ⎜
⎞
⎠ ⎟
Så här skriver man ovanstående i Matlab:[1 3 2; 5 4 6] * [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 *.
26
Andra elementvisa arrayoperationerVarning: 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.
28
Kommentarer i Matlab
• I de flesta programspråk finns det möjlighet att skriva kommentarer blandad i koden.
• Kommentarer är till för att andra som ska redigera programmet ska få lite lättare att förstå tanken bakom koden.
• Kommentarer kan också vara ett minnesstöd – man glömmer lätt hur man har tänkt.
• I Matlab är allt som står till höger om tecknet % kommentarer.
29
Villkor – if-satser• I vissa lösningar behöver man ibland skriva
ett program där ett val måste göras beroende på ett villkor uppfylls eller inte.
price=input('What is the price of the book? ');if price >= 135
disp('very expensive but')enddisp(['I buy one copy of the book.'])
30
If-syntax
if villkorsatssats
end
if villkorsatssats
elsesats
end
if villkor1sats
elseif villkor2sats
end
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.
T.ex:age = input(’How old are you? ') ;if age >= 20
disp('welcome to systembolaget')else
a = 20-age ; disp(['sorry, you must wait ' num2str(a) ' years'])
End• Semikolon i slutet av en sats undertrycker
utskrift.
32
Relationsoperatorer• "<" - 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
33
Slingor
• Om man vill upprepa något flera gånger använder man sig av en slinga (looppå engelska)
• Det finns två typer av slingor i Matlab:– for– while
34
Slingor - syntax
• While-satswhile logiskt_uttryck
sats
sats
end
• For-satsfor variabel = vektor,
sats
sats
end
35
Exempel på for-slinga
Matematisk notation:
MATLAB-kommandon:for k=[1 2 3],
x(k)= k^2
end
Utskrift:x =
1x =
1 4x =
1 4 9
2 , för alla 1, 2, 3kx k k= =