Institutt for geofag Universitetet i Oslo 18. (og 19.) september 2012
Litt repetisjon: Array En array er en variabel som inneholder flere objekter (verdier) En endimensjonal array er en vektor En array med to eller flere dimensjoner er en matrise I dag skal vi fortsette å jobbe med matriser (kapittel 8)
Matriser i 2 dimensjoner En matrise i matematikk er et rektangulært sett av elementer ordnet i rader og kolonner En matrise, A, med m rader(r) og n kolonner(k) kolonne(k) A m,n = rad(r) k 1 k 2 k n r 1 a 1,1 a 1,2 a 1,n r 2 a 2,1 a 2,2 a 2,n....... r m a m,1 a m,2 a m,n
Definere matriser i MatLab Komma eller mellomrom brukes til å skille mellom objekter i en gitt rad, mens enter eller semikolon brukes for å skille mellom individuelle rader Man kan bruke enter for å skille mellom rader: >> x= [1 2 3 4 5 6] x = 1 2 3 4 5 6
Definere matriser i MatLab Man kan også bruke semikolon for å skille mellom rader: >> x= [1 2 3;4 5 6] x = 1 2 3 4 5 6
Definere matriser i MatLab Alle rader i en matrise må ha samme antall kolonner (eller objekter) Dette betyr ikke at du trenger samme antall rader og kolonner! Prøver vi å definere en matrise med 3 objekter i første rad og 4 objekter i andre rad, får vi en feilmelding: >> x= [1 2 3;4 5 6 7] Error using vertcat CAT arguments dimensions are not consistent.
Matrisekommando: size Ønsker du å vite størrelsen på en matrise, bruk kommandoen size Definerer en matrise C c = 2 3 5 6 7 8 9 10 11 12 7 3 length: antall rader >> length(c) 4 size: antall rader og antall kolonner >> size(c) 4 3
Matrisekommando: Transponere Akkurat som vi brukte fnutt for å få radvektorer til å bli kolonnevektorer og vica versa, kan vi bruke fnutt for å transponere en matrise Å transponere en matrise betyr at rader blir kolonner og kolonner blir rader x = [1 2 3; 4 5 6] >> x x = >> x 1 2 3 7 4 5 6 8 1 4 2 5 3 6 7 8
Indeksering: D matriser For matriser er plasseringen til hvert objekt i matrisen unikt definert ved radnummer og kolonnenummer I en D matrise trenger vi derfor 2 indeksverdier for hvert objekt radnummer og kolonnenummer Indeksering: arraynavn(radnr.,kolonnenr.) Indeksvektoren definerer du på samme måte som for vektorer. Forskjell: her har du 2 indeksvektorer!
Indeksering: hente ett objekt x = [1 2 3; 4 5 6] x = 1 2 3 4 5 6 Objekt i rad 1 og kolonne 2 >> x(1,2) 2 Objekt i rad 2 og kolonne 3 >> x(2,3) 6
Indeksering: kolon alle objekter Kolon brukes for å hente alle rad- eller kolonneobjektene arraynavn(:,kolonnenr) : henter alle objekter i kolonnen med nummer kolonnenr. arraynavn(radnr., :) : henter alle objektene i raden med nummer radnr. x = [1 2 3; 4 5 6] Kolonne nr. 2 >> x(:,2) 2 5 Rad nr. 1 >> x(1,:) 1 2 3
Indeksering: overskrive objekter Vi kan overskrive objekter, rader og kolonner x = [1 2 3; 4 5 6] Overskriver ett objekt >> x(1,3)=9 Overskriver rad nr. 1 >> x(1,:)=8 x = x = 1 2 9 4 5 6 8 8 8 4 5 6
Indeksering: overskrive objekter Indeksvektoren definerer du på samme måte som for vektorer. Forskjell: her har du 2 indeksvektorer! x = [1 2 3; 4 5 6] Legger til 2 til objekter i første og tredje kolonne >> x(:,[1 3])=x(:,[1 3])+2 x = 3 2 5 6 5 8
Indeksering: overskrive objekter Indeksvektoren definerer du på samme måte som for vektorer. Forskjell: her har du 2 indeksvektorer! x = [1 2 3; 4 5 6] Dobler objektene i første rad >> x(1,:)= x(1,:)*2 x = 2 4 6 4 5 6
Indeksering: kommandoen end gjelder fortsatt c = 2 3 5 6 7 8 9 10 11 12 7 3 >> c(2:end,:) 6 7 8 9 10 11 12 7 3 >> c(3:end,2:end) 10 11 7 3
Arrayoperasjoner: Gjelder også for matriser Operasjon Data a = [a 1 a 2... a n ] (en vektor) b = [b 1 b 2... b n ] (en vektor) c = en skalar (ett tall) Skalar addisjon a+c = [a 1 + c a 2 + c... a n + c] Skalar multiplikasjon a c = [a 1 c a 2 c... a n c] Array addisjon a+b = [a 1 + b 1 a 2 + b 2... a n + b n ] Array multiplikasjon a. b = [a 1 b 1 a 2 b 2... a n b n ] Array divisjon a./b = [a 1 /b 1 a 2 /b 2... a n /b n ] Array eksponential a.ˆ c = [a 1ˆc a 2ˆc... a nˆc] c.ˆ a = [cˆa 1 cˆa 2... cˆa n ] a.ˆ b = [a 1ˆb 1 a 2ˆb 2... a nˆb n ]
Arrayoperasjoner x = [1 2 3; 4 5 6] Legger til 2 til hvert objekt >> x+2 3 4 5 6 7 8 Dobler hvert objekt >> 2*x 2 4 6 8 10 12
Arrayoperasjoner Matematiske operasjoner med to (eller flere) matriser: Husk punktum! Matrisene må ha lik størrelse x = [1 2 3; 4 5 6] y = [10 20 30; 40 50 60] Divisjon >> y./x 10 10 10 10 10 10 10 10 Multiplikasjon >> x.*y 10 40 90 490 160 250 360 640
Arrayoperasjoner: legge til en ekstra rad eller kolonne x = [1 2 3; 4 5 6] Leggger til en ekstra rad >> x(3,:)=[7 8 9] x = 1 2 3 4 5 6 7 8 9 Legger til en ekstra kolonne: Legg merke til semikolon! >> x(:,4)=[7; 8] x = 1 2 3 7 4 5 6 8
Sette sammen matriser Ønsker vi å sette sammen flere matriser til en stor må matrisene enten ha: Like mange rader i matrisene eller like mange kolonner i matrisene Vi definerer en matrise A: >> A=[2 3 5; 6 7 8; 9 10 11] A = 2 3 5 6 7 8 9 10 11
Legge sammen matriser: like mange rader B har like mange rader som A >> B=[12 7; 3 5; 2 17] B = 12 7 3 5 2 17 B kommer etter A >> c=[a B] c = 2 3 5 12 7 6 7 8 3 5 9 10 11 2 17
Legge sammen matriser: like mange kolonner B har like mange kolonner som A >> B=[12 7 3] B = 12 7 3 Legg merke til semikolon: B kommer under A >> c=[a; B] c = 2 3 5 6 7 8 9 10 11 12 7 3
Oppgave 1: Matrise-triksing 1 2 3 A = 5 7 10 0 15 1 70 8 9 Hva inneholder b hvis vi skriver: a) b = size(a) b) b = A(3,2) c) b = A(1,3) d) b = A(:,3) e) b = A(2,:) f) b = [A ; [10 5 8]] g) b = [A, [4; 7; -8; 3]] h) b = A([2 4],[1 1]) i) b = A(end:-1:1,end:-1:
Oppgave 2: V.h.a. det du kan om vektorer og matriser, lag denne matrisen: 1 1 1 1 1 1 A = 1 2 4 8 16 32 1 3 9 27 81 243
Standard Matriser i MatLab MatLab har kommandoer som lager standard zeros(m,n) : genererer en m n array med nuller ones(m,n) : genererer en m n array med enere eye(m,n) : genererer en m n identitetsmatrise rand(m,n) : genererer en m n array med tilfeldig genererte tall mellom 0 og 1 zeros(n), ones(n), eye(n) og rand(n) : genererer en n n array For zeros, ones og rand kan du legge til så mange dimensjoner du ønsker. F.eks zeros(m,n,p) gir deg en m n p array
Standard Matriser i MatLab rand(m,n): tilfeldige tall mellom 0 og 1 >> rand(2,3) 0.2785 0.9575 0.1576 0.5469 0.9649 0.9706 eye(m,n): verdien 1 på hoveddiagonalen, 0 ellers >> eye(3) 1 0 0 0 1 0 0 0 1
Matriseoperasjoner: Standard matriser Det er vanlig å manipulere MatLabs standard matriser for å få akkurat den matrisen vi ønsker Ønsker vi en matrise med pi-verdier på diagonalen: >> pi.*eye(4) 3.1416 0 0 0 0 3.1416 0 0 0 0 3.1416 0 0 0 0 3.1416
Matriseoperasjoner: Standard matriser Ønsker vi en matrise der alle objektene har verdien pi (eller ett hvilket som helst annet tall), kan det gjøres på flere måter: >> pi+zeros(5,2) 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 >> d=pi; >> d(ones(5,2)) 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416