Linjära system 1 Linjära system 1 Linjära system Mål Jämför målen med matematiks linjäralgebrakurs: I I I I I I I Matematikkursen: I I Denna föreläsning: I I I Lösning av linjära ekvationssystem: huvuddelen av exekveringstiden i många beräkningsprogram! I Om vektorer och matriser i Matlab Algoritmer: grundalgoritm för gausselimination, bakåtsubstitution Grundalgoritmen instabil! Stabilisering via radpivotering Exekveringstid LU-faktorisering att förstå egenskaper hos linjära ekvationssystem i allmänhet att kunna lösa små ekvationssystem för hand Här: I I att kunna lösa stora ekvationssystem med dator att förstå de datoranpassade algoritmerna och deras egenskaper Dessa anteckningar bygger på material av Stefan Pålsson, Avdelningen för teknisk databehandling, Uppsala Universitet Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 7 november 2008 Linjära system 1 7 november 2008 2 / 33 Vektorer och matriser i Matlab Vektorer i Matlab >> vk = [1; 2; 3; 4; 5]; >> vr = [5 6 7 8]; >> vk I vr(1) till vänster om = betyder tilldelning av ett tal i 1:a komponenten av vektorn vk = vr 1 2 3 4 5 I Tecknet ’ betyder transponat Numeriska metoder för civilingenjörer vr = -1.1000 3.5000 7.0000 8.0000 >> vk = vr’; >> vk -1.1000 3.5000 7.0000 8.0000 vr = 5 >> vr(1) = -1.1; vr(2) = 3.5; >> vr vk = >> vr Martin Berggren () Numeriska metoder för civilingenjörer Vektorer och matriser i Matlab Vektorer i Matlab Semikolon ger radbyte! Martin Berggren () 1 / 33 6 7 8 7 november 2008 3 / 33 Martin Berggren () Numeriska metoder för civilingenjörer 7 november 2008 4 / 33 Linjära system 1 Vektorer och matriser i Matlab Linjära system 1 Vektorer, matriser i Matlab Bygga matriser >> A = [1 7; 5 3]; >> vk = [1; 2; 3; 4; 5]; >> size(A), size(vk), length(vk) ans = 2 2 Bestämma storlek och längd ans = ans = Martin Berggren () 5 >> A = [A; 2 1] Givet A D ! 5 alternativt 1 7 , skapa 5 3 1 0 1 7 AQ D @5 3A 2 1 1 " >> temp = [2 1]; >> A = [A; temp]; >> A A = >> A(1,1) = 1; A(1,2) = 7; >> A(2,1) = 5; A(2,2) = 3; >> A ! " 1 7 AD 5 3 A = Skilj på rad- och kolonnvektorer! 1 5 7 3 Numeriska metoder för civilingenjörer Linjära system 1 7 november 2008 Martin Berggren () 5 / 33 Vektorer och matriser i Matlab 7 november 2008 6 / 33 7 november 2008 8 / 33 Vektorer och matriser i Matlab Bygga matriser Matlab kan behandla hela eller delar av rader, kolonner och submatriser Kolon (:) betecknar hel rad resp kolonn Martin Berggren () 7 3 1 Numeriska metoder för civilingenjörer A = >> A(2,:) I 1 5 2 >> tempk = [2; 1]; >> A = [A; tempk] ??? Error using ==> vertcat CAT arguments dimensions are not consistent. Linjära system 1 Bygga matriser I Vektorer och matriser i Matlab ans = 5 Kolonnotationen gör det enkelt att hantera delmatriser 3 1 0 2 7 0 1 6 5 3 >> A(2,:) = [0 0]; I A(:,j) kolonn j i A >> B = A(2:3, 1:2) A = 1 0 2 I A(i,:) rad i i A B = I A(i:k,j:m) delmatris rader i , i C 1, . . . , k ; kolonner j , j C 1, . . . , m 7 0 1 Numeriska metoder för civilingenjörer 7 november 2008 7 / 33 Martin Berggren () 0 2 0 1 Numeriska metoder för civilingenjörer Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 Algoritmer I Algoritmer: gausselimination, bakåtsubstitution Gausselimination—grundalgoritmen Matlabs “backslash”-operator (\) löser systemet Ax D b Gausselimination genomförs i två steg: >> x = A\b I Standardalgoritm: gausselimination baserad på LU-faktorisering (dagens ämne!) I “Intelligent” operator: väljer olika metoder beroende på matrisens struktur I Egentlig gausselimination: Systemet Ax D b transformeras via elementära radoperationer till formen Ux D d där U är en övertriangulär matris I Bakåtsubstitution: Systemet Ux D d löses “Naiv” version (som när man räknar för hand): I Indata: A, b , n (matrisordning) 1. Bilda totalmatrisen AO D ŒA b! 2. För kolonn k D 1, 2, . . . , n ! 1 Nollställ elementen i kolonn k för alla rader i nedanför kolonn k genom att addera lämplig multipel av rad k till rad i D k C 1, k C 2, . . . , n Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 7 november 2008 9 / 33 Algoritmer: gausselimination, bakåtsubstitution Indata: A , b , n (matrisordning) I Bilda totalmatrisen Aug = [A I Indata: U, d, n b] I x(n) = d(n)/U(n,n) för k = 1: n-1 för i = k+1:n Lik = Aug(i,k)/Aug(k,k) Aug(i,k:n+1) = Aug(i,k:n+1) - Lik*Aug(k,k:n+1) I för i = n-1:-1:1 I Obs att U skrivs in i övertriangeln av Aug(1:n,1:n) och d in i Aug(1:n,n+1)! I Denna överskrivning gör att man sparar minne. Viktigt då matrisen är stor! Numeriska metoder för civilingenjörer 7 november 2008 10 / 33 Algoritmer: gausselimination, bakåtsubstitution Bakåtsubstitution i pseudokod I Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 Gausselimination—naiv version i pseudokod I Martin Berggren () 7 november 2008 x(i)= ( d(i) - U(i,i+1:n)*x(i+1:n) )/(U(i,i) 11 / 33 I Obs att i praktiken används Aug(1:n,1:n) istället för U I Vanligen lagras x i Aug(1:n,n+1) (d v s man skriver över vektorn d) i stället för i en separat variabel x! Martin Berggren () Numeriska metoder för civilingenjörer 7 november 2008 12 / 33 Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 Naiv gausselimination är instabil Naiv gausselimination är instabil Exempel: 0 1 0 1 3 !1 2 8 2:01 ) @0 0:333 !1:67 !3:67A ) fl.x/ D @!0:848A 0 0 11:0 22:1 1:61 0 1 0 1 3 !1 2 8 1 .A j b/ D @1 0 !1 !1A med exakta lösningen x D @!1A 4 2 !3 !4 2 vilket är långt från den riktiga lösningen x D .1; !1; 2/T Låt Li k vara faktorn som används för att nollställa ai k . Anta 3 siffrors noggrannhet fl.L21 / D fl.1=3/ D 0:333 Instabil algoritm: algoritmen förstärker successivt avrundningsfelen. Orsakar ett stort fel i lösningen fl.L31 / D fl.4=3/ D 1:33 0 1 3 !1 2 8 ) @0 0:333 !1:67 !3:67A 0 3:33 !5:67 !14:6 Kom ihåg: Aug(i,k:n+1) = Aug(i,k:n+1) - Lik*Aug(k,k:n+1) Problemet: om jLi k j > 1 så kommer multiplikationen att förstora avrundningsfelen! fl.L32 / D fl.3:33=0:333/ D 10 Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 Avrundningsfelen kommer successivt att bli värre och värre 7 november 2008 13 / 33 Martin Berggren () Linjära system 1 Stabilisering via radpivotering Åtgärd: radpivotering I För varje nytt k , hitta på vilken rad m det gäller att Aug(m,k) " Aug(i,k), i = k, k+1, ..., n I I ord: hitta det till beloppet största elementet i kolonn k i nedanför och inkluderande diagonalen I Byt plats på rad m och k I När Li k skapas divideras då med det största elementet i kolonnen I Resultat: jLi k j # 1, vilken stabiliserar algoritmen Numeriska metoder för civilingenjörer 7 november 2008 14 / 33 Algoritmer: gausselimination, bakåtsubstitution Radpivotering Tidigare exempel: Martin Berggren () Numeriska metoder för civilingenjörer Algoritmer: gausselimination, bakåtsubstitution I Algoritmer: gausselimination, bakåtsubstitution 0 1 3 !1 2 8 .A j b/ D @1 0 !1 !1A 4 2 !3 !4 0 1 4 2 !3 !4 @1 0 !1 !1A 3 !1 2 8 fl.L21 / D fl.1=4/ D 0:25 0 fl.L31 / D fl.3=4/ D 0:75 1 4 2 !3 !4 ) @0 !0:5 !0:25 0 A 0 !2:5 4:25 11 7 november 2008 ˇ ˇ ˇ ˇ Byt plats på rad 1 och 3 ˇ 15 / 33 Martin Berggren () ˇ ˇ ˇ ˇ Byt plats på rad 2 och 3 ˇ Numeriska metoder för civilingenjörer 7 november 2008 16 / 33 Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 Radpivotering Exekveringstid 0 1 4 2 !3 !4 ) @0 !2:5 4:25 11 A 0 !0:5 !0:25 0 fl.L32 / D fl.!0:5= ! 2:5/ D 0:2 ) Martin Berggren () 0 1 4 2 !3 !4 @0 !2:5 4:25 11 A 0 0 !1:1 !2:2 Numeriska metoder för civilingenjörer Linjära system 1 ) x1 D 1 x2 D !1 x3 D 2 7 november 2008 I För stora matriser kan det ta mycket lång tid att exekvera (utföra) gausselimination I Lämpligt med ett datoroberoende mått på hur beräkningskrävande en algoritm är I Centralt begrepp: en algoritms komplexitet I Komplexitet mäts på olika sätt för olika typer av algoritmer 17 / 33 Martin Berggren () Linjära system 1 I Lämpligt komplexitetsmått: antal aritmetiska operationer I Exekveringstiden kommer väsentligen att vara proportionell mot detta (minneshanteringen påverkar också exekveringstiden, särskilt för mycket stora problem) Centralt problem: hur beror antalet aritmetiska operationer på matrisen ordning? 18 / 33 Algoritmer: gausselimination, bakåtsubstitution I Undersök gausseliminationen för ett godtyckligt k D 1, . . . , n ! 1 för i = k+1:n Lik = Aug(i,k)/Aug(k,k) Aug(i,k:n+1) = Aug(i,k:n+1) - Lik*Aug(k,k:n+1) # $ Antal op: .n ! k/ 1 C 2.n ! k C 2/ $ 2.n ! k/2 7 november 2008 19 / 33 utförs n ! k gånger 1 op n ! k C 2 element 2 op per element (räknar enbart högsta potens) Summera över alla k : n!1 X kD1 Numeriska metoder för civilingenjörer 7 november 2008 Komplexitetsanalys I Martin Berggren () Numeriska metoder för civilingenjörer Algoritmer: gausselimination, bakåtsubstitution Komplexitet hos gausselimination I Algoritmer: gausselimination, bakåtsubstitution 2 2.n ! k/2 D n3 C O.n2 / 3 (Lemma 8.3.1 i bok) I Slutsats: gausselimination av ett n % n-system kräver 23 n3 C O.n2 / aritmetiska operationer I Analog analys: bakåtsubstitution kräver operationer Martin Berggren () n2 2 Numeriska metoder för civilingenjörer C O.n/ aritmetiska 7 november 2008 20 / 33 Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 Komplexitetsanalys Komplexitetsanalys Vad betyder detta i exekveringstid? Hur stort system kan lösas på en timme om datorn klarar 1 Gflop/s? (Gflop = 109 flyttalsoperationer) Antag tf D 10!9 s/flyttalsop (s/flop); ett realistiskt tal n 103 106 faktorisering bakåtsubstitution 2 3 3 n tf n2 tf 10!3 s 103 s $ 17 min 0:67 s 0:67 % 109 s $ 21 år Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 Svar: 32 n3 & 10!9 D 3 600 ) n $ 18 000 Hur stort system kan lösas på en minut? Svar: 23 n3 & 10!9 D 60 ) n $ 4 500 7 november 2008 Linjära system 1 I Alternativ: Utnyttja struktur i matrisen, om möjligt. Finns versioner av gausselimination t ex för bandade eller mycket glesa matriser En helt annan typ av algoritmer, iterativa algoritmer, blir nödvändiga för mycket stora, glesa matriser I I Sådana matriser kommer ofta från lösning av partiella differentialekvationer För sådana problem förekommer matrisordningar upp till n D 108 ! Kräver stora paralleldatorer (t ex den nya Akka här i Umeå) och speciellt anpassade algoritmer Martin Berggren () Numeriska metoder för civilingenjörer 7 november 2008 22 / 33 Algoritmer: gausselimination, bakåtsubstitution LU-faktorisering Komplexiteten O.n3 / begränsar användbarheten hos gausselimination I Numeriska metoder för civilingenjörer Algoritmer: gausselimination, bakåtsubstitution I I Martin Berggren () 21 / 33 Behov av effektiva algoritmer I Algoritmer: gausselimination, bakåtsubstitution 7 november 2008 23 / 33 I I Vanlig situation: följd av ekvationssystem med samma matris men med olika högerled: Ax .k/ D b .k/ ; k D 1, . . . , m Idé: faktorisera A en gång för alla: I Spara U I Spara faktorerna L i k i en matris L I Spara informationen om pivoteringen i en matris P I Detta kallas LU-faktorisering av A I Kan visa att LU D PA Martin Berggren () Numeriska metoder för civilingenjörer 7 november 2008 24 / 33 Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 LU-faktorisering I I LU-faktorisering Givet A, beräkna L, U , P , så att LU D PA Ax D b ) PAx D P b ) LU D P b Vad vinner man på LU-faktorisering jämfört med “vanlig” gausselimination? (faktorisering, O.n3 /) I Ineffektiv strategi: Lös varje system med x=A\b I För varje högerled b .k/ , utför I I Lös problemet (framåtsubstitution, O.n2 /) Ld D P b I I I I (bakåtsubstitution, O.n2 /) Ux D d I för att bestämma lösningen x .k/ Numeriska metoder för civilingenjörer Linjära system 1 7 november 2008 Martin Berggren () d = L\b x = U\d Komplexitet: 23 n3 C 2mn2 (1 faktorisering + m framåt- och bakåtsubstitution) Martin Berggren () 25 / 33 Numeriska metoder för civilingenjörer Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 LU-faktorisering i Matlab >> A = [3 -1 2; 1 0 -1; 4 2 >> b = [8; -1; -4]; >> [L, U, P] = lu(A); L = 1.0000 0 0 0.7500 1.0000 0 0.2500 0.2000 1.0000 U = 4.0000 2.0000 -3.0000 0 -2.5000 4.2500 0 0 -1.1000 P = 0 0 1 1 0 0 0 1 0 A kommer att faktoriseras på nytt för varje högerled! Komplexitet: m. 23 n3 C n2 / (m system med faktorisering + bakåtsubstitution) Effektiv strategi: LU-faktorisera A (lu(A) i Matlab) och lös sedan varje system med för att bestämma d Lös problemet Martin Berggren () Algoritmer: gausselimination, bakåtsubstitution 7 november 2008 26 / 33 Algoritmer: gausselimination, bakåtsubstitution LU-faktorisering i Matlab -3]; Numeriska metoder för civilingenjörer Kolla: Lösning med LU-faktorisering >> P*A ans = 4 3 1 >> L*U ans = 4 3 1 >> d = L\(P*b) d = -4.0000 11.0000 -2.2000 >> x = U\d x = 1 -1 2 2 -1 0 -3 2 -1 2 -1 0 -3 2 -1 Obs: När matriserna är under- eller övertriangulära väljer backslashoperatorn algoritmerna för framåt- respektive bakåtsubstitution 7 november 2008 27 / 33 Martin Berggren () Numeriska metoder för civilingenjörer 7 november 2008 28 / 33 Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution Linjära system 1 LU-faktorisering i Matlab LU-faktorisering: exempel Matematiskt objekt Använder backslash LU-faktorisering? Testa! 2 -4 -2 2 -2 2 -2 2 9 matris 0 1 !4 !2 !2 @2 2 !2A !2 3 9 I Indikerar användning av LU-faktorisering 40 högerled lagras i matrisen B40 D Œb1 b2 : : : b40 ! permutationsvektor -4 2 -2 -2 2 2 2 -2 9 matris Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 7 november 2008 29 / 33 2 1 3 permutationsvektor 7 november 2008 30 / 33 Algoritmer: gausselimination, bakåtsubstitution LU-faktorisering: exempel -4 -2 -1/2 1 1/2 4 2 -1 8 matris Elimination, kolonn 2, med faktorer L32 D 1=4: 2 1 3 0 1 !4 !2 !2 @0 4 8A 0 0 !3 permutationsvektor Radbyte: -4 -2 2 1/2 4 8 -1/2 1/4 -3 matris Klart! Matristolkning av datastrukturerna: -4 -2 1/2 4 -1/2 1 matris Martin Berggren () Numeriska metoder för civilingenjörer Linjära system 1 Elimination, kolonn 1, med faktorer L21 D !1=2, L31 D 1=2: 0 1 !4 !2 !2 @0 4 8A 0 1 !1 Martin Berggren () Algoritmer: gausselimination, bakåtsubstitution LU-faktorisering: exempel 1 ˇ 0 !4 !2 !2 ˇ ˇ @ 1 !1A ˇ! 0 ˇ ! 0 4 8 1 2 3 Radbyte: 40 system med samma matris läses nästan lika fort som 1 system! I Observera att Datastrukturer 1 ˇ 0 2 !2 ˇ! 2 ˇ @ ˇ! !4 !2 !2A ˇ !2 3 9 >> n = 2000; >> A = rand(n,n); >> B40 = rand(n, 40); b1 = rand(n,1); >> tic; X = A\B40; toc Elapsed time is 1.883686 seconds. >> tic; x = A\b1; toc Elapsed time is 1.481570 seconds. I Algoritmer: gausselimination, bakåtsubstitution Numeriska metoder för civilingenjörer 2 8 -1 0 2 3 1 permutationsvektor 7 november 2008 31 / 33 1 1 0 0 1 0A ; L D @ 1=2 !1=2 1=4 1 Martin Berggren () 0 1 !4 !2 2 4 8 A; U D@ 0 0 0 !3 Numeriska metoder för civilingenjörer 2 3 1 permutationsvektor 0 1 0 1 0 P D @0 0 1A 1 0 0 7 november 2008 32 / 33 Linjära system 1 Algoritmer: gausselimination, bakåtsubstitution LU-faktorisering: exempel 0 I I I 1 LU D @ 1=2 !1=2 0 0 PA D @0 1 10 1 0 1 0 0 !4 !2 2 !4 !2 2 1 0A @ 0 4 8 A D @!2 3 9A 1=4 1 0 0 !3 2 2 !2 10 1 0 1 1 0 2 2 !2 !4 !2 2 0 1A @!4 !2 2 A D @!2 3 9A 0 0 !2 3 9 2 2 !2 Slutsats: LU D PA L och U lagras i A:s minnesutrymme Permutationsinformationen lagras i en vektor (en full matris P med mest nollor vore slöseri med minnesutrymme) Martin Berggren () Numeriska metoder för civilingenjörer 7 november 2008 33 / 33