Laboration: Vektorer och matriser

Beräkningsvetenskap KF
September 2015
Laboration: Vektorer och matriser
Grundläggande om matriser
Begreppet matris är en utvidgning av vektor-begreppet, och det används bl a när man löser
linjära ekvationssystem. Namnet Matlab står för MATrix LABoratory, dvs matris-laboratorium
på svenska. Det antyder att Matlab är specialkonstruerat just för matriser och matrisräkning.
Du behöver inte redovisa något i den här labben, men anteckna svaren på en del av frågorna
för att du själv ska lära dig.
Introduktion
När man löser en enkel ekvation, t ex 2x = 6 gör man det enligt x =
1
⋅ 6 = 2 −1 ⋅ 6 = 3 . I det
2
1
b = a −1b . Om man istället har ett linjärt system
a
av ekvationer, kan man då formulera det på samma sätt?
allmänna fallet ax = b, får man x genom x =
Ett exempel: Ekvationssystemet
⎧ 2x1 + 4x2 − 6x3 = −4
⎪
⎨ x1 + 5x2 + 3x3 = 10
⎪ x + 3x + 2x = 5
1
2
3
⎪⎩
har lösningen x1 = -3, x2 = 2, x3 = 1 (pröva t ex genom att sätta in x-värdena i systemet).
Lösningen kan även skrivas på vektorform:
⎛ −3 ⎞
x=⎜ 2 ⎟
⎜
⎟
⎜⎝ 1 ⎟⎠
Om man lagrar koefficienterna i ekvationssystemet (dvs 2, 4, -6 etc) i en s k matris, precis i den
ordning som de står i ekvationssystemet, och högerledet i en kolonnvektor får man
⎛ 2 4 −6 ⎞
⎛ −4 ⎞
A = ⎜ 1 5 3 ⎟ , b = ⎜ 10 ⎟
⎜
⎟
⎜
⎟
⎜⎝ 5 ⎟⎠
⎜⎝ 1 3 2 ⎟⎠
Med ”rätt¨definition av matris-vektormultiplikation kan man nu skriva ekvationssystemet som
Ax = b och lösningen fås på samma sätt som tidigare genom x = A −1 ⋅b , där A-1 kallas för
matrisen A:s invers.
Vi ska nu med hjälp av Matlab titta på hur man löser ekvationssystem med hjälp av matriser och
vektorer och vilka regler som gäller för matriser.
Beräkningsvetenskap KF
September 2015
Att göra
1. Du ska nu lösa ekvationssystemet i exemplet med hjälp av Matlab. Skapa först i Matlab
matrisen A genom att i kommandofönstret skriva
A = [2
4
-6;
1
5
3; 1
3
2]
Semikolon inne i hakparanteser betyder som tidigare radbyte (och semikolon som avslut
av raden undertrycker utskrift). Skapa sedan högerledet b genom att skriva in
b = [-4; 10;5]
Lös sedan ekvationssystemet i Matlab genom att använda A:s invers, dvs x = A −1 ⋅b . I
Matlab beräknas matrisinvers genom kommandot inv och lösningen fås alltså genom
x = inv(A)∗b
Testa detta.
2. För att Ax verkligen ska bli detsamma som vänsterledet i ekvationssystemet dvs att
⎛ 2 4 −6 ⎞ ⎛ x1 ⎞ ⎛ 2x1 + 4x2 − 6x3
⎜
⎟ ⎜
Ax = ⎜ 1 5 3 ⎟ ⋅ ⎜ x2 ⎟ = ⎜ 1x1 + 5x2 + 3x3
⎜
⎟
⎜⎝ 1 3 2 ⎟⎠ ⎜ x ⎟ ⎜ 1x + 3x + 2x
1
2
3
⎝ 3 ⎠ ⎝
⎞
⎟
⎟
⎟
⎠
så måste regeln för matris-vektor multiplikation bli
rad 1: 2x1 + 4x2 − 6x3 är detsamma som
rad 2: x1 + 5x2 + 3x3 är detsamma som
rad 3: x1 + 3x2 + 2x3 är detsamma som
(
⎛ x1 ⎞
⎜
⎟
2 4 −6 ⎜ x2 ⎟
⎜ x ⎟
⎝ 3 ⎠
)
(
⎛ x1 ⎞
⎜
⎟
1 5 3 ⎜ x2 ⎟
⎜ x ⎟
⎝ 3 ⎠
(
⎛ x1 ⎞
⎜
⎟
1 3 2 ⎜ x2 ⎟
⎜ x ⎟
⎝ 3 ⎠
)
)
dvs skalärprodukten mellan raderna i A och x.
Definiera nu i Matlab följande matriser och vektorer:
⎛
⎛ 1 2 1 ⎞
⎜
B = ⎜ 2 0 3 ⎟, C = ⎜
⎜
⎟
⎜
⎜⎝ 3 1 2 ⎟⎠
⎜⎝
2
2
4
1
1
1
2
2
3
2
1
1
⎞
⎛ 1 ⎞
⎟
⎟, v = ⎜ 2 ⎟
⎜
⎟
⎟
⎜⎝ 1 ⎟⎠
⎟⎠
Beräkningsvetenskap KF
September 2015
Verifiera att regeln för matris-vektor multiplikation stämmer genom att
a) Beräkna B ⋅ v för hand på papper
b) Beräkna samma sak i Matlab
3. För vektorer gällde att transponering gjorde att kolonn istället blev rad och vice versa.
Man kan även transponera matriser. Undersök i Matlab hur BT ser ut och jämför med B.
Vad händer uppenbarligen när man transponerar en matris?
1
⋅ a = 1 . Frågan är då vad som är motsvarigheten
a
till 1 för matriser? Beräkna i Matlab t ex A −1 ⋅ A . Vilket blir resultatet?
Resultatet av beräkningen kallas för enhetsmatrisen och är alltså matrisers motsvarighet
till talet 1.
4. För ett vanligt tal a gäller att a −1 ⋅ a =
5. Man kan utföra de grundläggande operationerna addition och subtraktion på matriser
precis som för vektorer. Utför nedanstående beräkningar i Matlab och försök lista ut hur
operationerna fungerar för matriser:
a) A+B
b) A-B
c) A+C (varför fungerar det inte här?)
6. Matrismultiplikation är definierat genom en rad skalärprodukter mellan rader och
kolonner. Multiplikationen A ⋅ B bli en ny matris som definieras enligt
⎛ (A:s rad 1)⋅(B:s kolonn 1) (A:s rad 1)⋅(B:s kolonn 2) (A:s rad 1)⋅(B:s kolonn 3)
⎜
A ⋅ B = ⎜ (A:s rad 2)⋅(B:s kolonn 1) (A:s rad 2)⋅(B:s kolonn 2) (A:s rad 2)⋅(B:s kolonn 3)
⎜⎝ (A:s rad 3)⋅(B:s kolonn 1) (A:s rad 3)⋅(B:s kolonn 2) (A:s rad 3)⋅(B:s kolonn 3)
Med hjälp av detta, lös matrismultiplikationen A ⋅ B
a) dels för hand
b) dels i Matlab för att se att det stämmer
7. Kommutativa lagen vid multiplikation säger att för två tal a och b gäller att a ⋅ b = b ⋅ a .
Gäller detta för matriser (i det allmänna fallet)? Undersök i Matlab om A ⋅ B = B ⋅ A ?
8. Vad gäller om matriserna har olika storlek? Kan man utföra multiplikation ändå?
Undersök i Matlab
a) B * C
b) C * B
Försök förklara varför det fungerar i ena fallet, men inte i det andra.
⎞
⎟
⎟
⎟⎠
Beräkningsvetenskap KF
September 2015
9. Några specialmatriser i Matlab
I Matlab finns en del särskilda kommandon för att skapa specialmatriser, t ex
zeros(m,n), ones(m,n), rand(m,n) och eye(n) där m och n är antalet rader
respektive antalet kolonner. Undersök vad de olika kommandona gör genom att skriva i
Matlab
a) zeros(8,6)
b) ones(2,4)
c) eye(5) (vad är det för matris?)
d) rand(6,6) (rand står för random, dvs en matris med slumptal)
10. Hur lång tid tar det att lösa linjära ekvationsystem i Matlab?
Du ska här undersöka ungefär hur lång tid det tar att lösa linjära ekvationssystem med
olika antal obekanta. Gör detta genom att skapa en slumptalsmatris med m rader och
kolonner och ett högerled med m rader och 1 kolonn av slumptal, och sedan lösa
ekvationssystemet. Gör följande i Matlab (se till att få alla semikolon rätt, annars blir det
mängder av utskrifter):
m = 1000;
A = rand(m,m);
b = rand(m,1);
tic; x = inv(A)*b; toc
Detta löser ett ekvationssystem med 1000 obekanta och skriver ut den tid det tar.
Den sista raden (tic, toc) utför en tidtagning. Den tid som åtgår mellan kommandona
tic och toc, dvs lösningen av ekvationssystemet, skrivs ut när man använder toc utan
semikolon. Ungefär hur lång tid tar det.
Lös på samma sätt ett ekvationssystem med 4000 obekanta genom att sätta m=4000; och
upprepa kommandona (man kan upprepa kommandon genom tangenten uppåtpil).
11. Upprepa samma sak igen, men ändra lösningen av ekvationsystemet från
x=inv(A)*b;
till
x=A\b;
Upprepa och jämför tiderna med uppgift 10. Går det snabbare eller långsammare?
Den s k backslash-operatorn, \ , innehåller en annan numerisk metod för lösning av
linjära ekvationssystem och använder inte matrisinvers. Vilken metod är uppenbarligen
effektivast? Hur metoden fungerar kommer senare i kursen.
12. I matematiken brukar elementen i en matris A med m rader och n kolonner betecknas
⎛
⎜
⎜
A=⎜
⎜
⎜
⎜
⎝
a11
a12
a13
a21
a22
a23
a31
a32
a33

am1
am2
am3
 a1n ⎞
⎟
 a2n ⎟
 a3n ⎟
⎟
  ⎟
 amn ⎟
⎠
där aij alltså betecknar elementet på rad i och kolonn j.
Beräkningsvetenskap KF
September 2015
I Matlab anger man ett visst element på rad i och kolonn j med A(i,j) (jämför
vektorer). Med samma matris B som tidigare, testa och förstå vad som händer när du ger
följande kommandon i Matlab
a) B(1,2)
b) B(3,1) = -10
c) B(:,2)
d) B(3,:)
Vad tycks det som : (kolon) betyder när det används som index i en matris? Tolka
uppgift c) och d).
Några ytterligare kommandon inom linjär algebra
Det finns i Matlab en hel rad med kommandon inom linjär algebra som kan vara av
intresse (lite beroende på hur långt du kommit inom linjär algebra). Här är några. Testa
gärna på egen hand med hjälp av hjälp-texter i Matlab.
dot(x,y)
cross(A,B)
eig(A)
eigs(A)
det(A)
null(A)
orth(A)
rank(A)
trace(A)
ett annat sätt att beräkna skalärprodukt
kryssprodukt mellan matriser A och B
Egenvärden och egenvektorer till en matris A
Största egenvärden till en matris A och motsvarande egenvektorer
Determinanten till en matris A
nollrummet till A (ger en bas för nollrummet)
Ortonormal bas för e matris A
A:s rang
Summan av A:s diagonalelement