MATLAB
• MATrix LABoratory
MATLAB
• Räknedosa för matriser
miljö och “programmeringsspråk”
• Visualisering av data
Introduktion
avancerad grafik
Hösten 2010
Tillämpning Matlab
2
Interpreterande skriptspråk
• Ingen kompilator
• En sats evalueras
(interpreteras/tolkas)
sats för sats när
skriptet körs
Introduktion till Matlab
• Kallas för
interpreterande språk
Hösten 2010
Tillämpning Matlab
3
Hösten 2010
Tillämpning Matlab
Språket - kommandosyntaxen
Variabler
• Stor uppsättning kommandon och funktioner
• Ingen variabeldeklaration
avancerade algoritmer
inriktat mot linjär algebra
Finansiell matematik
Statistik
Simulering
etc.
>> A = 7.5*2
>> 7.5*2 (resultatet i variabel ans)
• Enkelt konstruera egna rutiner och
funktioner (M-filer)
Hösten 2010
Tillämpning Matlab
som i Python
variabler definieras genom tilldelning
• Tilldelningar sker med =
• Resultat utan tilldelning tilldelas variabeln
ans
• Många tillämpningar i applikationer
4
• semikolon undertrycker utskrifter
• case-sensitive
5
Hösten 2010
Tillämpning Matlab
6
Vektorer
…variabler
• Den grundläggande datatypen är flyttal
• En sekvens av data
• Kan vara ordnad i rader eller kolumner
• Skapas omslutna av [ och ]
normalt 16 decimaler
C:double, Python: float
• Elementen är i de flesta fall reella
(kan även vara komplexa)
>> v = [1, 2, 3, 4]
• Indexeras med ( och ) med start från 1
Många andra inbyggda datatyper
(olika former av heltal, tecken, etc.)
>> v(1)
1
Jämför med listor i Python
Behöver inte deklarera
storlek som i C
Hösten 2010
Tillämpning Matlab
7
Tillämpning Matlab
Hösten 2010
...vektorer
Skalärer
• En radvektor kan göras om till en
kolumnvektor
• En vektor av längd 1, kallas skalär, dvs ett
vanligt tal.
w = v'
>> v = [4]
4
>> v*[1,2,3]
4
8
• Kan även skapa en kolumnvektor direkt
w = [1; 2; 3; 4]
Hösten 2010
Tillämpning Matlab
9
start : steg
: stopp
Jämför med range i
Python:
>> range(0,10,2)
Matlab:
>> 0:2:9
start : stopp
• Skalär-vektor-operation (+, -, *, /)
>> v = [1 2 3]
>> 4 * v + 3
ans = 7
11
15
• vektor-vektor-operationer (+, -, .*, ./,.^)
Steglängden är 1.
>> v + v
ans = 1
>> v.*v;
ans = 1
>> v.^3
ans = 1
x = -pi/2:pi/30:pi/2
Ger en radvektor
Hösten 2010
10
Elementvisa operationer
: operatorn – Skapa vektorer
Ger en följd av värden från
start till stopp med steglängd
steg.
12
Tillämpning Matlab
Hösten 2010
8
Tillämpning Matlab
11
Hösten 2010
4
6
4
9
8
27
OBS!
>> v * v
Betyder en matrisoperation som hör till
linjär algebra. Ger
vanligtvis ett fel elller
ovänatade resultat
Tillämpning Matlab
12
Strängar
Elementvisa operationer
x = linspace(0,1);
%
OBS! Radvektor
y = x.^n.*exp(x);
%
OBS! Radvektor
• Textsträngar representeras
av vektorer av tecken
Samma som i C
• Strängar skapas
Samma som i Python
med enkla citationstecken
>> s = 'Text'
>> s(1)
ans = T
Hösten 2010
Tillämpning Matlab
13
The matrix
Hösten 2010
Tillämpning Matlab
Enstaka element i matrisen
• En matris är en samling rad- eller
kolumnvektorer
• Alla vektorer måste vara lika långa
• Bildar en grid av värden
variabel(radindex, kolumnindex)
A(2,3)
Observera!
skillnad mellan
tilldelning och
adressering
>> A = [1, 2, 3; 4, 5, 6; 7, 8, 9]
A =
1
2
3
4
5
6
7
8
9
Hösten 2010
14
Tillämpning Matlab
15
n × n-matris med ettor
ones(m,n)
m × n-matris med ettor
zeros(n)
n × n-matris med nollor
Tillämpning Matlab
16
Indexering
Att skapa matriser
ones(n)
Hösten 2010
• Vi kan indexera i en vektor med en skallär
>> v = [4, 5, 6];
>> v(3)
• En skallär var också en vektor, alltså
zeros(m,n) m × n-matris med nollor
rand(n)
n × n-matris med slumptal
rand(m,n)
m × n-matris med slumptal
>> v([2, 3])
ans = 5
6
• eller ännu smidigare med kolonoperatorn
>> v = [1, 2, 3];
>> v(2:3)
ans = 5
6
Hösten 2010
Tillämpning Matlab
17
Hösten 2010
Tillämpning Matlab
18
alla
Del av matrisen
• Att lära sig jobba med jämföresleoperatorer
och kolonoperatorn ger ett väldigt kraftfullt
verktyg när vi jobbar med datamängder
i:te raden
A(i,:)
j:te kolumnen
A(:,j)
>> v = [3 2
>> v > 3
0
0
>> find(v >
3
5
>> v(v > 3)
3
2
>> v(find(v
3
2
delmatris
A(i:j,k:l)
Hösten 2010
Tillämpning Matlab
19
Konkatenera och ersätta
1
0
= 0
0
1
0
== 0)) = 9
9
1
9
Hösten 2010
2
2
Tillämpning Matlab
20
exempel1.m
• Anropar skriptet med filens namn utan ändelse
>> exempel1
25
• Kan byta katalog med cd
• Kommentarer inleds med % och räcker resten av
raden
21
Hösten 2010
Tillämpning Matlab
22
Söka hjälp
who/whos
>> what
M-files in the current directory
C:\Dokument\PTX\ht10
exempel1
>> pwd
ans =
C:\Dokument\PTX\ht10
>> cd ..
>> pwd
ans =
C:\Dokument\PTX
Tillämpning Matlab
0
v = 1:2:10;
disp(sum(v));
what/pwd/cd
Hösten 2010
1
3)
• Vi kan utföra kommandon interaktivt eller samla
dem i skrip-filer (.m-filer)
• Textfiler, vanligtvis med en sats per rad
>> A = [1 2 3; 4 5 6]
A = 1
2
3
4
5
6
>> v = [A(1,:) A(2, :)]
v = 1
2
3
4
5
6
>> B = [A(1,1:2); A(2, 2:3)]
B = 1
2
5
6
>> v(3:4) = [8 8]
v = 1
2
8
8
5
6
Tillämpning Matlab
7 1 8 2];
Att skriva skript
• (Del)matriser och (del)vektorer kan enkelt
byggas i hop till nya matriser och vektorer
Hösten 2010
Att arbeta med data
Listar existerande variabler
help
Skriver ut hjälp om en funktioner och
matlab
lookfor
23
Söker efter sökord bland existerande
funktioner
Hösten 2010
Tillämpning Matlab
24
2D Grafik
plot
2D Grafik
Tillämpning Matlab
Hösten 2010
Ritar ut en mängd av ordnade tal-par
>> x = 1:0.01:3;
>> y = 1./x;
>> plot(x, y, 'g:')
25
Tillämpning Matlab
Hösten 2010
Argument till plot
… 2D grafik
• Tar ett strängargument
• Flera funktioner för att anpassa plotten
Punkttyper
Linjetyper
Funktion Beskrivning
.
punkt
-
heldragen linje
*
asterisk
--
streckad linje
xlabel
Sätter etiketten på x-axeln
square
fyrkant
-.
punkt-streckad linje
ylabel
Sätter etiketten på y-axeln
diamond
ruta
:
prickad linje
titel
Sätter etiketten på plotten
hexagram
stjärna
Färgtyper
o
ring
g
grön
+
plusstecken
m
lila
x
kryss
b
blå
<
triangel vänster
c
turkos
>
triangel höger
k
svart
^
triangel upp
y
gul
v
triangel ned
r
röd
Hösten 2010
Tillämpning Matlab
• Möjlighet att spara plottar för att skriva ut
flera kurvor i samma graf med hold
27
2D Grafikexempel
>>
>>
>>
>>
26
Hösten 2010
Tillämpning Matlab
28
Tillämpning Matlab
30
2D Grafik
x = 1:0.01:3;
y1 = 1./x;
y2 = 1./x.^2
plot(x, y1, 'k:', x, y2, 'g-')
>> plot(x, y1, 'k:')
>> hold on
>> plot(x, y2, 'g-')
Hösten 2010
Tillämpning Matlab
29
Hösten 2010
...2D Grafik
• Fler grafikfunktioner
bar – skapar stapeldiagram
Kontrollstrukturer och
funktioner
pie – skapar cirkeldiagram
stem – skapar ett stamdiagram
Tillämpning Matlab
Hösten 2010
31
Kontrollstrukturer...
if logiskt uttryck
satser
end
for variabel = vektor
for (i=1; i<=n; i=i+2)
{
satser
}
satser
for i = 1:2:n
satser
if logiskt uttryck
satser
else
satser
end
for i in range(1, n+1, 2):
satser
end
if logiskt uttryck
satser
elseif logiskt uttryck
satser
end
for i = 1:n
satser
end
Hösten 2010
Tillämpning Matlab
33
…kontrollstrukturer
v = [1, 2, 3]
if v(1) == 1
satser
elseif v(2) == 2
satser
else
satser
end
Hösten 2010
Tillämpning Matlab
Hösten 2010
34
Jämförelseoperatorer
int v[3] = {1,2,3};
if (v[0] == 1) {
satser
} else if (v[1] == 2) {
satser
} else {
satser
}
v = [1, 2, 3]
if v[0] == 1:
satser
elif v[1] == 2:
satser
else:
satser
Tillämpning Matlab
32
…kontrollstrukturer
• for – iterering över vektor
end
Tillämpning Matlab
Hösten 2010
35
Operator
Matlab
C
Python
Lika med
==
==
==
Icke lika med
~=
!=
!=
Större än
>
>
>
Mindre än
<
<
<
och
&
&&
and
eller
|
||
or
Hösten 2010
Tillämpning Matlab
36
…kontrollstrukturer...
while logiskt uttryck
satser
end
x=0.1
while (x < 3) {
x *= 1.1
}
x=0.1
while x < 3
x = x*1.1
end
x=0.1
while x < 3:
x *= 1.1
Tillämpning Matlab
Hösten 2010
Funktioner
37
(annars en kommandofil)
Undantaget kommentarer
function [utparam] = namn(inparam)
% Pedher Johansson, 2010
• noll, en eller flera inparametrar
• noll, en eller flera utparametrar
• anropas med namn(parametrar)
y = a.*x.^2 + b.*x + c
• ingen return-sats behövs, utan utparameterns
värde används
val = namn(arg1, arg2)
Tillämpning Matlab
Hösten 2010
39
…funktioner
Hösten 2010
Tillämpning Matlab
40
Anonyma funktioner
>> help poly2
POLY2 second order polynom of x
• Enkla egna funktionsuttryck kan definieras
som anonyma funktioner
Y = POLY2(X,A,B,C,D) computes Y
such that Y = A*X^2+B*X+C
• Funktionen tilldelas en variabel
See also POLY, ROOTS
>> x = -1:0.1:1;
>> y = poly2(x, 1, 0, 0);
>> plot(x, y)
>> f = @(x) 1./x.^2
>> x = 0:0.01:1
Kommentarer först i funktionen skrivs ut när
man använder help
Jmf med Python
Hösten 2010
38
function y = poly2(x, a, b, c)
%
POLY2 second order polynom of x
%
%
Y = POLY2(X,A,B,C,D) computes Y
%
such that Y = A*X^2+B*X+C
%
%
See also POLY, ROOTS
• En funktion - en fil
• Filnamn ska vara lika med funktionsnamn
• Första raden skall innehålla ordet function
Tillämpning Matlab
…funktioner
Funktioner
Hösten 2010
Tillämpning Matlab
41
>> y = f(x)
Hösten 2010
Tillämpning Matlab
42
Dessutom
• Enkelt att skapa GUI
knappar
menyer
pop-up menyer
inmatningsfält
• Programbibliotek kan läggas till
(TOOLBOXES)
Hösten 2010
Tillämpning Matlab
43