• No results found

Operationer p˚ a matriser

3.3 Inbyggda funktioner

3.3.3 Operationer p˚ a matriser

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 kolumnvek-tor. H¨angde ni med? Det ¨ar nog enklare att bara g¨ora det hela ¨an att f¨ors¨oka l¨asa den h¨ar

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 desamma 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.

kolonoperatorn

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.

3.4. OVNINGSUPPGIFTER¨ 31

3.4 Ovningsuppgifter ¨

1. Skapa en vektor med x-v¨arden: x = (1, 3, 5, 7). Skapa sedan, genom ber¨akningar p˚a x-vektorn d¨ar du anv¨ander de elementvisa operationerna, en vektor y d¨ar varje element uppfyller y = 3 ∗ x2+ 4x f¨or motsvarande element i x-vektorn. Skapa d¨arefter vektorn yPrim, genom att anv¨anda elementvisa operationer p˚a vektorn x, d¨ar varje element ¨ar lika med derivatan av ekvationen ovan, ber¨aknade f¨or x-v¨arden ur vektorn x.

2. Givet vektorn x = [1 2.75 3.9 4.6], skapa (anv¨and elementvis operation) y, d¨ar varje element ges av yi = 2x3i + 4xi− 3

3. Anv¨and kolonoperatorn f¨or att skapa kolumnvektorn b =

vektorerna f¨or att skapa matrisen

3, 4). Kovariansmatrisen definieras d˚a som:

V−1 =

Du har nu gjort gjort fyra m¨atningar med os¨akerheter σi och lagrat dem i vektorn S = [ σ1 σ2 σ3 σ4] = [ 0.5 1.0 0.25 2.0]. Skapa sedan med enbart vektor- och matrisoper-ationer matrisen

V−1 =

4 0 0 0

0 1 0 0

0 0 16 0

0 0 0 0.25

fr˚an vektorn S.

7. Utg˚a fr˚an vektorn alfa = [ 0 30 60 90 ] som betecknar fyra vinklar i grader.

Skapa sedan vektorn x d¨ar elementen ¨ar samma vinklar uttryckta i radianer.

Skapa d¨arefter vektorn s d¨ar elementen ¨ar sinus f¨or de givna vinklarna.

Skapa slutligen vektorn c, d¨ar elementen ¨ar cosinus f¨or de givna vinklarna. Anv¨and inte funktionen cos, utan ber¨akna v¨ardet genom formeln cos α =√

1 − sin2α. Anv¨and dessa vektorer f¨or att skapa matrisen A med fyra rader och tre kolumner, varje rad skall best˚a av vinkel, sinus f¨or vinkeln och cosinus f¨or vinkeln

8. Fem bollar med olika massor m rullar p˚a rad med varsin konstant hastighet v. Bollarnas massor och hastigheter ges av f¨oljande tabell:

m (kg) v (m/s)

2.0 2.0

1.5 4.0

3.0 -3.0

2.0 1.0

2.5 6.0

G¨or en vektor f¨or samtliga massor och en vektor f¨or samtliga hastigheter och ber¨akna d¨arefter varje bolls r¨orelseenergi med ett enda kommando. R¨akna ut totala r¨ orelse-energin med ytterligare ett kommando.

Kapitel 4

B¨ orja programmera

4.1 Villkorssatser

Det ¨ar mycket vanligt att ett program skall utf¨ora olika saker beroende p˚a om vissa villkor

¨

ar uppfyllda eller inte. Den enklaste formen av en villkorssats har formen:

if (test) ....

end

d¨ar test ¨ar en logisk test som ¨ar sann eller falsk. Om test ¨ar sann utf¨ors koden mellan if och end, annars hoppas det avsnittet ¨over. Enklare villkorssatser kan skrivas p˚a bara en rad om man s˚a ¨onskar, med komma mellan kommandona:

if (test), ... , end ;

Man kan ¨aven specificera vad som skall h¨anda om test ¨ar falsk genom konstruktionen if (test)

... kod 1 else

... kod 2 end

i det fallet utf¨ors ...kod 1 om test ¨ar sann, annars ...kod 2. Slutligen kan man utf¨ora fler tester med konstruktionen

if (test1) ... kod 1 elseif(test2)

... kod 2 elseif(test3)

... kod 3 else

... kod 4 end

I en s˚adan konstruktion utf¨ors den kod som f¨oljer efter den f¨orsta test som ¨ar sann, ¨ar test1 falsk men test2 sann utf¨ors ...kod 2 och s˚a vidare. Om ingen av testerna ¨ar sann utf¨ors ...kod 4. En viktig sak att komma ih˚ag ¨ar att endast ett kodparti utf¨ors, om fler av testerna ¨ar sanna s˚a utf¨ors det kodparti som svarar mot den av de sanna testerna som kommer f¨orst i konstruktionen. ¨Ar b˚ade test1 och test3 sanna i exemplet ovan s˚a utf¨ors bara ...kod 1, inte ...kod 3.

Ett test byggs upp av n˚agon av 6 relationsoperatorer:

33

a < b ¨ar sant om a ¨ar mindre ¨an b

a ≤ b ¨ar sant om a ¨ar mindre ¨an, eller lika med b (kodas “<=”) a == b ¨ar sant om a ¨ar lika med b (notera att vi inte kan skriva a = b,

det kommandot s¨atter a till samma v¨arde som b har) a ≥ b ¨ar sant om a ¨ar st¨orre ¨an eller lika med b (kodas “>=”) a > b ¨ar sant om a ¨ar st¨orre ¨an b

a ∼= b ¨ar sant om a inte ¨ar lika med b

Ett enkelt exempel p˚a villkorssatser ¨ar villkorade utskrifter fr˚an ett program:

if (x>0)

disp(’x ¨ar st¨orre ¨an noll’) elseif(x<0)

disp(’x ¨ar mindre ¨an noll’) else

disp(’x ¨ar lika med noll’) end

Man kan ocks˚a kombinera ihop tv˚a tester med hj¨alp av logiska operatorer:

operator funktion logikfunktion

& and(A,B) och a & b ¨ar sann om b˚ade a och b ¨ar sanna

| or(A,B) eller a|b ¨ar sann om minst en av a och b ¨ar sann

∼ not(A) icke d = ∼a: d ¨ar sann om a ¨ar falsk och omv¨ant.

xor(A,B) exklusiv eller a xor b ¨ar sann om exakt en av a och b ¨ar sann Ett exempel p˚a en s˚adan kombinerad test ¨ar if ((a < b) & (b<c)) som allts˚a ¨ar sann om a < b < c. Om vi anv¨ander oss av funktionsformen kan vi skriva samma test if (and(a<b,b<c)). Den viktigaste orsaken till att funktionsformen finns ¨ar att den g¨or det l¨attare att definiera en boolsk variabel, vi kan t.ex. skriva C=and(a<b, b<c) d¨ar C ¨ar en variabel som har v¨ardet true om villkoret a < b < c ¨ar uppfyllt och v¨ardet false om det inte ¨ar sant.