Linjär algebra, I1 2011/2012 Matematiska vetenskaper Matriser och linjära ekvationssystem Matriser En matris är som ni vet ett rektangulärt talschema: a 11 a 1n A = a m1 a mn Matrisen ovan har m rader och n kolonner, vi säger att den är av typ m n Ett matriselement i rad nr i, kolonn nr j tecknas a ij, där i är radindex och j är kolonnindex I Matlab skrivs detta A(i,j) och [m,n]=size(a) ger matrisens typ Indexeringen av en matris i Matlab är alltid som ovan, dvs rad- och kolonnindex börjar alltid på ett och vi kan inte ändra på det En matris av typ m 1 kallas kolonnmatris (kolonnvektor) och en matris av typ 1 n kallas radmatris (radvektor): a 1 a = a m, b = [ ] b 1 b n Du kommer att se att vi använder oftast kolonnvektorer för att representera kvantiteter som vi beräknar Element nr i ges i Matlab av a(i) och antalet element ges av m=length(a) Motsvarande gäller för radvektorn b Även för vektorer gäller att indexeringen alltid börjar på ett Som exempel tar vi Vi skriver in detta i Matlab enligt >> A=[1 4 7 10; 2 5 8 11; 3 6 9 12] >> a=[1; 3; 5] >> b=[0 2 4] 1 4 7 10 1 A = 2 5 8 11, a = 3, b = [ 0 2 4 ] 3 6 9 12 5 Uppgift 1 Skriv in följande matriser i Matlab 1 5 9 A = 2 6 10 4 5 6 1 3 7 11, B = 3 2 1, x = 1, a = [ 1 0 1 ] 1 1 1 1 4 8 12 1
Skriv ut matriselementen a 23, b 23, x 2 Prova size och length Ändra b 23 genom att skriva B(2,3)=5 En matris kan betraktas som en kollektion av kolonner: a 11 a 1j a 1n A = = [ ] a 1 a j a n a m1 a mj a mn med kolonnerna a 1 = a 11 a m1, a j = a 1j a mj, a n = Man kan även betrakta den som en kollektion av rader, men vi använder oftast kolonnrepresentationen I Matlab plockar man ut kolonn nr j med A(:,j) Här är j kolonnindex medan radindex i = 1,,m representeras av tecknet kolon (:) På liknande vis ges rad nr i av A(i,:) Uppgift 2 Skriv ut kolonn nr 1, 2 och 3 ur matrisen A i uppgift 1 Sätt in kolonnvektorn x som första kolonn i B genom att skriva B(:,1)=x Uppgift 3 Radera matrisen B (clear B) och skriv in den igen genom att först bilda kolonnerna 4 5 6 b 1 = 3, b 2 = 2, b 3 = 1 1 1 1 och sedan sätta in dem i matrisen B = [b 1 b 2 b 3 ] Elementära funktioner Funktioner som sinus och cosinus, kan operera på matriser Man får som resultat en matris av samma typ vars element är funktionsvärdet av respektive element i argumentet Som exempel tar vi som vi skriver in i Matlab enligt >> A=[1 4 7 10; 2 5 8 11; 3 6 9 12] >> c=[0 2 4 6 8] a 1n a mn 1 4 7 10 A = 2 5 8 11, c = [ 0 2 4 6 8 ] 3 6 9 12 Nu beräknar vi sinus av vektorn c och matrisen A med >> v=sin(c) 0 09093-07568 -02794 09894 >> V=sin(A) V = 08415-07568 06570-05440 09093-09589 09894-10000 01411-02794 04121-05366 2
Matris- och vektorfunktioner Vi har redan sett funktionerna length och size Som exempel använder vi samma vektor c och matris A som tidigare Antal element i vektorn c ges av >> l=length(c) l = 5 och antalet rader och kolonner A fås med >> [m,n]=size(a) m = 3 n = 4 Största och minsta elementet i en vektor fås med funktionerna max och min För en matris blir det de största elementen i varje kolonn >> v=max(c) 8 >> v=max(a) 3 6 9 12 Vi ser på hjälptexten för max Vi ser att med [v,index]=max(c) kan vi få reda på var det maximala värdet finns någonstans 3
Summan och produkten av elementen i vektorn fås med sum och prod För en matris blir det summan eller produkten av varje kolonn >> s=sum(c) s = 20 >> s=sum(a) s = 6 15 24 33 Vill vi sortera en vektor i stigande ordning gör vi det med sort För en matris blir det varje kolonn som sorteras om i stigande ordning Matlab har funktionerna zeros, ones, eye för att bilda speciella matriser med nollor, ettor och enhetsmatris Med zeros(2,5) får vi en matris av typen 2 5 fylld med nollor och med ones(2,5) får vi en matris av samma typ, men fylld med ettor För att få en enhetsmatris av typen 5 5 ger vi eye(5,5) Med ones(size(a)) får vi en matris fylld med ettor av samma typ som A Motsvarande gäller för zeros och eye Det finns funktioner rand och randn för att bilda matriser fyllda med slumptal Hantering av matriser Vektorn c = (0, 2, 4, 6, 8) kan bildas på de två sätten >> c=[0 2 4 6 8] >> c=0:2:8 Det senare lite enklare sättet kallas kolon-notation Med kolon-notation en bygger vi upp en vektor enligt variabelnamn = startvärde: steg: slutvärde Det finns ytterligare ett sätt att bilda c, nämligen med funktionen linspace enligt >> c=linspace(0,8,5) Som argument till linspace ger vi startvärde, slutvärde och antal värden jämnt fördelade mellan gränserna Vi låter s få tredje värdet c 3 med s=c(3) och bildar vektorn v av andra och femte värdet, dvs (c 2, c 5 ), med >> v=c([2,5]) 2 8 Vi kan ändra ett element i v, tex låta v 2 = 0, med >> v(2)=0 2 0 4
Vi låter s få värdet av elementet på rad 2, kolonn 3 i matrisen A från inledningen med s=a(2,3) och vi bildar en radvektor v av rad 3, alla kolonner med >> v=a(3,:) 3 6 9 12 samt en kolonnvektor u av rad 2-3, kolonn 2 med >> u=a(2:3,2) u = 5 6 Vi bildar en matris V av blocket rad 1-2, kolonn 2-3 >> V=A(1:2,2:3) V = 4 7 5 8 Matris-vektor-multiplikation Vi definierar produkten av en radmatris och en kolonnmatris (med samma antal element) enligt: x 1 ax = [ ] a 1 a n x n = a 1 x 1 + a 2 x 2 + + a n x n Observera att detta är samma formel som för skalärprodukt Produkten y = Ax av en matris av typen m n och en kolonnvektor av typen n 1 definieras på liknande vis genom att vi multiplicerar matrisens rader i tur och ordning med kolonnvektorn Vi får en kolonnvektor av typen m 1 och den ges av y = Ax (1) y 1 a 11 a 1n x 1 a 11 x 1 + a 12 x 2 + + a 1n x n = =, (2) y m a m1 a mn x n a m1 x 1 + a m2 x 2 + + a mn x n y i = n a ij x j = a i1 x 1 + a i2 x 2 + + a in x n j=1 Observera att typerna måste stämma överens för att produkten ska vara definierad enligt regeln m 1 = (m n)(n 1) Ett alternativt sätt att introducera matris-vektor-multiplikation är att definiera Ax som en linjärkombination av kolonnerna i A, (se Lay avsnitt 14) x 1 Ax = [ ] a 1 a n x n = x 1 a 1 + x 2 a 2 + + x n a n 5
Detta leder förstås till samma uttryck som i (2), x 1 a 1 +x 2 a 2 + +x n a n = a 11 a m1 x 1 + a 12 a m2 I Matlab skriver man helt enkelt y=a*x x 2 + + a 1n a mn x n = a 11 x 1 + a 12 x 2 + + a 1n x n a m1 x 1 + a m2 x 2 + + a mn x n Uppgift 4 Skriv in följande matriser i Matlab 1 5 9 A = 2 6 10 4 5 6 1 3 7 11, B = 3 2 1, x = 1, a = [ 1 0 1 ] 1 1 1 1 4 8 12 Beräkna följande produkter, först för hand sedan med Matlab Linjärt ekvationssystem Ax, Bx, ax, Aa Matriser används bland annat för att skriva ned linjära ekvationssystem Exempel: ekvationssystemet x 1 + 2x 2 + 3x 3 = 14 3x 1 + 2x 2 + x 3 = 10 7x 1 + 8x 2 = 23 kan skrivas på matrisform 1 2 3 x 1 14 3 2 1 x 2 = 10, 7 8 0 x 3 23 dvs 1 2 3 14 Ax = b, med A = 3 2 1, b = 10 7 8 0 23 Vi ska lära oss hur man löser sådana ekvationssystem I Matlab finns backslash-kommandot (\) eller alternativt kommandot rref (row-reduced-echelon form) som löser systemet, Ax = b: >> x=a\b >> rref([a b]) I det första fallet fungerar det bra om lösningen är entydig men sämre om det finns fria variabler eller inga lösningar alls I det andra fallet reducerar Matlab den utökade matrisen [A b] till reducerad trappstegsform Ibland blir det något enklare att tolka svaret om an ger kommandot format rat före beräkningarna, då skriver Matlab svaret med rationella tal Med format short får vi tillbaka standard formatet 6
Uppgift 5 Skriv följande ekvationssystem på matrisform (utökad matris!) och lös dom sedan med \ respektive rref x 1 + 5x 2 + 9x 3 = 29 x 1 + x 2 + 3x 3 + 4x 4 = 2 2x 1 + 5x 3 = 26 2x 1 + 2x 2 + 2x 3 = 4 3x 1 + 7x 2 + 11x 3 = 39 x 1 + x 2 + 2x 3 + 3x 4 = 1 x 1 x 2 2x 3 x 4 = 1 Uppgift 6 Vi skall beräkna temperaturen på en stålplatta där plattans kanter hålls vid temperaturer enligt figuren Detta är en fortsättning på uppgiften Lay 11: 33 (sid 12-13) 20 C T1 T2 T3 T4 T5 T6 10 C 40 C T7 T8 T9 30 C Antag att temperaturen i en nodpunkt är medelvärdet av temperaturena i de närmsta nodpunkterna i väster, öster, söder och norr Låt T 1, T 2,, T 9 beteckna temperaturerna i de olika nodpunkterna Sätt upp de ekvationer som ger temperaturen i de olika nodpunkterna Skriv det linjära ekvationssystemet på matrisform AT = b och lös detta i Matlab Skapa matris kolonnvis Vi bygger ofta upp matriser med hjälp någon beräkningsalgoritm, ibland görs beräkningen kolonnvis Vi ger ett exempel Matrisen 1 2 3 4 10 C = 1 2 3 4 10 1 2 3 4 10 1 2 3 4 10 skapas av for-loopen clear C ett=ones(4,1); for i=1:10 C(:,i)=i*ett; end Uppgift 7 Skriv en skriptfil som gör detta Tag bort semikolon så att du ser vad som händer i varje steg Du kan också pröva att bilda C genom en sk ytterprodukt enligt C=ett*[1:10] Lägg märke till att ett är en kolonnvektor medan [1:10] är en radvektor Vi kan använda tic och toc för att mäta den tid beräkningarna tar Det blir tydligare om vi tar en större matris Pröva följande som en skriptfil 7
clear C ett=ones(2000,1); tic for i=1:100 C(:,i)=i*ett; end toc Tänk på att sätta semikolon på alla beräkningar, så inte skärmen fylls med ointressanta utskrifter Matrisen C kommer succesivt byggas upp och bli av typen 2000 100 Om vi nu istället för clear C skriver C=zeros(2000,100); så får matrisen C sin slutliga storlek på en gång Vi börjar med en stor matris fylld med nollor, där vi i loopen succesivt sätter in rätt kolonner Kör nu den nya skriptfilen och se om beräkningstiden blev kortare Matrisiterationer Avslutningsvis skall vi kort se på några matrisiterationer Vi kommer se mer av detta senare, bla vid lösning av icke-linjära ekvationssystem i kursen i flervariabel analys Uppgift 8 Låt 1 1 1 A = 0 1 1 0 0 1 Skriv en for-loop som skapar matrisen X = [x 1,x 2,,x 5 ] där 1 x 1 = 2, x k+1 = Ax k 3 Uppgift 9 Tre butiker A, B och C säljer samma elektronikpryl De bevakar varandra och justerar sina priser varje månad När butik A sätter priset för månad k utgår de från deras eget pris x k och justerar med proportionalitetsfaktorer c 12 och c 13 av skillnaden mellan det egna priset och priset hos konkurenterna, x k+1 = x k c 12 (x k y k ) c 13 (x k z k ) där y k och z k är priset hos B och C På motsvarande sätt justerar butikerna B och C sina priser Låt x k = (x k, y k, z k ) och sätt upp en matris A så att prisutvecklingen beskrivs av x k+1 = Ax k, k = 0, 1, Välj introduktionspriserna x 0 = 950, y 0 = 1050 och z 0 = 1099 Rita ett diagram över prisutvecklingen under 12 månader Pröva tex c 12 = 002, c 13 = 01, c 21 = 001, c 23 = 05, c 31 = 01 och c 32 = 01 Redovisning Uppgifterna 1-9 redovisas för handledaren 8