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.