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