• No results found

Inbyggda funktioner

 c1 = [1 ; 2 ; 4];

 c2 = [1 ; 0 ; 3];

 c3 = [2 ; -1 ; 0];

 C = [c1 c2 c3 ] C =

1 1 2 2 0 -1 4 3 0

H¨ar skapar vi formellt en 1×3 matris (en radvektor) d¨ar varje element i sin tur ¨ar en kolum-nvektor. Om man t¨anker p˚a det s¨attet s˚a kan man n¨astan grafiskt se vad satsen C = [c1 c2 c3 ] ger f¨or resultat.

2.5.5 R¨akna med matriser

Normal matrisalgebra fungerar i MATLAB, dessutom har vi tillg˚ang till de elementvisa operatorerna och vi kan ocks˚a applicera en m¨angd standardfunktioner som till exempel cos(x) ocks˚a p˚a matriser. N˚agra exempel:

 clear all

 a = [1 2 5 ; 2 -1 -3];

 b = [ 2 -1; 5 2; -1 0];

 a * b ans = 7 3 2 -4

 1./a ans =

1.0000 0.5000 0.2000 0.5000 -1.0000 -0.3333

 b .∧2 ans = 4 1 25 4 1 0

 a(1,2) + b(2,1) ans = 7

Som vanligt g¨aller naturligtvis att matrisernas dimensioner m˚aste matcha varandra f¨or att matrismultiplikationen skall fungera, annars erh˚aller vi felmeddelandet:

??? Error using ==> mtimes

Inner matrix dimensions must agree.

2.6 Inbyggda funktioner

Det finns ett mycket stort antal standardfunktioner inbyggda i MATLAB, man kan utg˚a ifr˚an att den funktion man vill anv¨anda ocks˚a finns inbyggd och bara mycket s¨allan bli man besviken. De vanligast f¨orekommande ¨ar grupperade i tre sektioner, element¨ara funktioner, specialfunktioner och element¨ara matrisfunktioner. Det enklaste s¨attet att f˚a reda p˚a vilka funktioner som finns ¨ar att i kommandof¨onstret skriva help elfun, help specfun och help elmat. N¨ar man v¨al hittat den funktion man s¨oker kan man f˚a mer detaljerade infor-mation om den genom att skriva help funktionsnamn. Observera att MATLAB skriver funktionsnamn med versaler i hj¨alpdokumentationen, men att du skall anv¨anda gemener (sm˚a bokst¨aver) n¨ar du ger kommandot i MATLAB.

2.6.1 Operationer p˚a skal¨arer Avrundning

MATLAB har ett antal funktioner f¨or att runda av decimaltal till heltal: floor som rundar av mot “minus o¨andligheten”, dvs mot n¨armast l¨agre tal vilket ¨ar detsamma som att bara droppa decimaldelen, round som rundar av mot n¨armaste heltal, ceil som rundar av mot

“positiva o¨andligheten, dvs n¨armast st¨orre tal, och fix som rundar av mot noll, dvs ned˚at f¨or positiva tal och upp˚at f¨or negativa tal.

2.6.2 Operationer p˚a vektorer

MATLAB har ett antal inbyggda funktioner som opererar p˚a vektorer. Vi har redan sett ett exempel p˚a en s˚adan, n¨amligen transponering ’, som applicerad p˚a en vektor g¨or om en radvektor till en kolumnvektor och vice versa.

Andra funkioner ¨ar:

zeros, ones, rand, randn

Dessa operatorer kan anv¨andas f¨or att skapa vektorer och matriser utan att man beh¨over tilldela elementen sina v¨arden ett och ett.

zeros(n,m) skapar en n × m matris d¨ar alla element ¨ar satta till noll. Som ett specialfall kan n eller m vara 1, i vilket fall en radvektor repektive kolumnvektor skapas.

ones (n,m) skapar en n × m matris d¨ar alla element ¨ar satta till 1.

rand (n,m) och randn (n,m) skapar matriser d¨ar elementen ¨ar slumpvis f¨ordelade, rand producerar tal som ¨ar j¨amnt f¨ordelade mellan 0 och 1, randn producerar slumptal som ¨ar normalf¨ordelade kring 0 med standardavvikelse lika med 1.

F¨or alla dessa g¨aller att om du bara ger en siffra som argument s˚a skapas en kvadratisk matris.

linspace

Kommandot linspace(x1, x2, N)skapar en vektor som har N element, x1 som f¨orsta element och x2 som sista element. Avst˚andet mellan elementen ber¨aknas automatiskt s˚a att de blir lika stora. Till exempel ger y = linspace(0,1,5) resultatet [0 0.2500 0.5000 0.7500 1.0000] medan y=linspace(0,1,4) ger [0 0.3333 0.666 1.0000]

length(vektor)

Kommandot length(vektor) returnerar l¨angden av vektorn x, man kan spara resultatet i en variabel genom att ge kommandot langd = length(vektor).

sum (vektor)

ber¨aknar summan av alla element i vektorn.

”kolon” - operatorn

”kolon” operatorn ¨ar en mycket anv¨andbar operator i MATLAB, b˚ade n¨ar vi arbetar med vektorer och matriser. Den f¨orekommer i fler olika versioner, vilket i b¨orjan kan g¨ora det litet f¨orvirrande. Den enklaste formen ¨ar a : b viket helt enkelt motsvarar serien av tal fr˚an a till b med steget 1 mellan varje tal. Vi kan definiera steget till att vara n˚agot annat tal ¨an

2.6. INBYGGDA FUNKTIONER 25 1, kolon operatorn ser d˚a ut s˚a h¨ar: a : c : b, vilket ger oss en serie tal mallan a och b, med steget c. N˚agra exempel:

 vektor1 = [ 2 : 6];

vektor1 = 2 3 4 5 6

 vektor2 = [ 1 : -0.5 : -4];

vektor2 =

1 0.5000 0 -0.5000 -1 -1.5000 -2 -2.5000 -3 -3.5000 -4

kolonoperatorn ¨ar uppenbarligen ett utm¨arkt verktyg f¨or att skapa vektorer med regelbundna intervall mellan elementet. Vi kommer snart att se att n¨ar vi skall producera grafer s˚a ¨ar det just precis s˚adana vektorer som vi kommer att skapa om och om igen.

N˚agot annat som blir v¨aldigt beh¨andigt med hj¨alp av kolonoperatorn ¨ar att adressera en serie element i en vektor:

 d = [ 11 12 13 14 15 16];

 d(2:4) ans = 12 13 14

2.6.3 Operationer p˚a matriser

De flesta av vektorfunktionerna opererar ocks˚a p˚a matriser, men ibland med litet ov¨antade resultat. Dessutom finns ett antal funktioner som ¨ar specifika f¨or matriser. N˚agra av de viktigaste ¨ar:

sum(matris)

Det ¨ar l˚ang ifr˚an uppenbart vad vi kan f¨orv¨anta oss h¨ar. Funktionen ger inte summan av alla element i matrisen, l˚at oss prova oss fram:

 A = [ 1 2 3 ; 4 5 6 ; 7 8 9];

 sum (A) ans = 12 15 18

sum (A) ger oss allts˚a tydligen en radvektor vars element ¨ar summan av kolumnerna i ma-trisen A. Detta beteende ¨ar n˚agot som kommer att ˚aterkomma, MATLAB arbetar ofta med kolumnerna i en matris. Hur skall vi g¨ora f¨or att ber¨akna summan av raderna? Det en-klaste ¨ar att anpassa sig till MATLABs preferenser, om MATLABs funktioner arbetar med kolumner och vi ¨ar intresserade av rader, l˚at oss transponera matrisen och sedan applicera funktionen p˚a den transponerade matrisen. I det h¨ar fallet ger oss sum(A’) en radvektor vars element ¨ar summan av kolumnerna av den transponerade matrisern, vilket ju ¨ar samma sak som summan av raderna i den ursrpungliga matrisen. Vill vi sedan f˚a det att se litet snyggt ut s˚a transponerar vi resultatet, som ju ¨ar en radvektor, till en kolumnvektor. H¨angde ni med? Det ¨ar nog enklare att bara g¨ora det hela ¨an att f¨ors¨oka l¨asa den h¨ar beskrivningen,

allts˚a:

 A’

ans = 1 4 7 2 5 8 3 6 9

 sum(A’) ans = 6 15 24

 sum(A’)’

ans = 6 15 24

Kommandot sum(A’)’ ger oss en kolumnvektor d¨ar varje element ¨ar summan av raden i den ursprungliga matrisen. G˚a igenom exemplet ovan och se till att du f¨orst˚ar alla led i operationerna!

eye(N)

Eye(N) producerar en N × N enhetsmatris.

diag(A)

Om A ¨ar en matris resulterar diag(A) i en kolumnvektor d¨ar elementet i raden n motsvarar elementet i diagonalen av matrisen p˚a rad n och i kolumn n.

Om A ¨ar en vektor, resulterar M=diag(A) i en matris d¨ar diagonalelementen ¨ar de samma som elementen i vektorn, allts˚a M(i,i) = A(i). Detta kommando ¨ar v¨aldigt anv¨andbart n¨ar vi senare vill skapa kovariansmatriser.

kolon operatorn

Precis som f¨or vektorer ¨ar kolonoperatorn ett bekv¨amt s¨att att adressera delar av en matris:

A(1:4,3) adresserar elementen som finns i rad 1 till och med fyra i den tredje kolumnen i matrisen A. Ett specialfall ¨ar n¨ar vi skriver : utan n˚agra omgivande siffror, operatorn resulterar d˚a i alla element i en kolumn eller rad: A(:,3) ger alla element i tredje kolumnen av A.