Teknisk Beräkningsvetenskap I Tema : Nätverk och linjära system Eddie Wadbro November, 04 Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Innehåll Algoritmer: Grundalgoritmen för Gausselemination och bakåtsubstitution Grundalgoritmen är numeriskt instabil! Stabilisering via radpivotering Beräkningskomplexitet, exekveringstid LU-faktorisering (en variant av Gausselimination) Noggrannhet Normer för vektorer och er Konditionstal (störningskänslighet) Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Linjära system Matematiska modeller ger ofta upphov till mycket stora linjära ekvationssystem (exempelvis, nätverksmodellen i detta tema) som behöver lösas med hjälp av datorer I många simuleringar domineras exekveringstiden av tiden för lösning av linjära ekvationssystem! Kategori Linjär Icke-linjär Algebra Analys ( Beräkningsbart) kostsamt om högdimensionellt Lösningen till ett matematiskt problem är beräkningsbar om den kan konstrueras med en ändlig sekvens av operationerna +,-,*,/ och exakt symbolisk manipulation Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48)
Mål: Att lösa det linjära ekvationssystemet Ax = b Jämfört med tidigare kurs: Linjär algebra (grundkurs i matematik) Allmän förståelse av vektorer, er, linjära ekvationssystem, och deras egenskaper Lära sig hur små linjära ekvationssystem löses för hand Denna kurs Förstå algoritmer anpassade för numerisk lösning av linjära ekvationssystem och deras egenskaper Lära sig lösa stora linjära ekvationsssytem med hjälp av datorer Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48) Linjära ekvationssystem Repetition från linjär algebrakursen A: kvadratisk n n Det linjära systemet Ax = b har en unik lösning för varje kolonnvektor b om en A är icke-singulär Matrisen är icke-singular om och endast om något av följande villkor håller Raderna är linjärt oberoende Kolonnerna är linjärt oberoende Ax = 0 x = 0 Determinanten av A är nollskild (det(a) 0) A är inverterbar Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (5 : 48) Algoritmer Matlabs backslash operator (\ eller mldivide) löser systemet Ax = b >> x = A\b där A är en kvadratisk och b samt x är kolonnvektorer Grundalgoritmen: Gausseliminationsbaserad LU-faktorisering (dagens huvudämne!) Matlabs \ är en intelligent operator: den väljer vilken metod som ska användas beroende på egenskaper hos en! (Vilket vi kommer att testa i datorlaborationen!) Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (6 : 48)
Grundalgoritmen för Gausselimination Grundalgoritmen för Gausselimination består av två steg Faktorisering: Elementära radoperationer omvandlar systemet Ax = b till ett system på formen Ux = d, där U är en övertriangular Bakåtsubstitution: Lös systemet Ux = d Naiv version av faktoriseringssteget (samma algoritm som när man löser för hand): Input: A, b, n (storleken på systemet). Skapa en  = [A b]. För kolonn k =,,..., n Släck ut (sätt till 0) elementen i raderna i, där i > k i kolonn k genom att lägga en multipel av rad k till rad i = k +, k +,..., n Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (7 : 48) Kod för den naiva faktoriseringsalgoritmen Input: n n A och n vektor b n = length(b); Aug = [A b]; for k = : n- for i = k+:n Lik = Aug(i,k)/Aug(k,k); for j = k:n+ Aug(i,j) = Aug(i,j) - Lik*Aug(k,j); end end end Observera att de första n kolonnerna av Aug skrivs över med en U och att kolonn n + i Aug (vilken från början innehöll högerledet b) skrivs över med lösningsvektorn d. Strategin att skriva över information sparar minne, vilket är viktigt när en är stor! Den innersta loopen kan i Matlab skrivas som en instruktion Aug(i,k:n+) = Aug(i,k:n+) - Lik*Aug(k,k:n+); Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (8 : 48) Kod för bakåtsubstitution För i = n, n,..., : Input: U, d, och n U ii x i + n j=i+ U ijx j = d j x(n) = d(n)/u(n,n) for i = n-:-: x(i) = ( d(i) - U(i,i+:n)*x(i+:n) )/(U(i,i); end Observera att U(i,i+:n)*x(i+:n) är en inre produkt (skalärprodukt) mellan radvektorn U(i,i+:n) och kolonnvektorn x(i+:n) Vi behöver inte skapa ytterligare en för att spara U; faktoriseringen har sparat U i Aug(:n,:n) Vanligtvis skrivs Aug(:n,n+) över med x; det behövs således inte någon ytterligare variabel för svaret x Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (9 : 48)
Den navia faktoriseringsalgoritmen är numeriskt instabil! Ex: ( A b ) = 8 0 4 4 med exakt lösning x = Låt L ik vara faktorn som vi vill använder för att nolla ut a ik. För detta exempel, antag att vi avrundar till decimala siffror (istället för att avrunda till 5 binära siffror!) fl(l ) = fl(/) = 0. fl(l ) = fl(4/) =. 8 0 0..67.67 0. 5.67 4.6 fl(l ) = fl(./0.) = 0 8 0 0..67.67 0 0.0. Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (0 : 48) Den navia faktoriseringsalgoritmen är numeriskt instabil! 8 0 0..67.67 0 0.0. fl(x) =.0 0.940.0 vilket är långt från den korrekta lösningen x = (,, ) T Numeriskt instabil algoritm: algoritmen förstärker successivt avrundningsfelen, vilket ger upphov till ett stort fel i den slutliga lösningen Betrakta: Aug(i,k:n+) = Aug(i,k:n+) - Lik*Aug(k,k:n+) Problemet: närhelst L ik >, så kommer multiplikationen att förstärka de (avrundnings)fel som finns i Aug(k,k:n+)! (Avrundnings)felen blir successivt större och större Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Stabilisering via radpivotering Botemedel: radpivotering Kom ihåg: Lik = Aug(i,k)/Aug(k,k) För varje k, finn en rad m så att Aug(m,k) Aug(i,k), i = k, k+,..., n I ord: för kolonn k, hitta det element på eller under diagonalen som har störst absolutbelopp Byt innehållet i rad m och k Då är Aug(k,k) Aug(i,k) för i k, så L ik, vilket förhindrar felförstärkning vid multiplikationen med L ik Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48)
Radpivotering Ex: ( A b ) = = 8 0 4 4 4 4 0 8 Byt rad och fl(l ) = fl(/4) = 0.5 fl(l ) = fl(/4) = 0.75 4 4 0 0.5 0.5 0 0.5 4.5 Byt rad och Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Radpivotering 4 4 0.5 4.5 0 0.5 0.5 0 fl(l ) = fl( 0.5/.5) = 0. 4 4 0.5 4.5 0 0.. fl(x) = Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48) Exekveringstid Det kan ta mycket lång tid att utföra Gausselimination för stora er En central fråga: hur beror antalet flyttalsoperationer på ens storlek? Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (5 : 48)
Antalet flyttalsoperationer Betrakta den andra for-loopen i faktoriseringssteget: for i = k+:n Lik = Aug(i,k)/Aug(k,k) for j = k:n+ Aug(i,j) = Aug(i,j) - Lik*Aug(k,j) utförs n k gånger op utförs n k + gånger op Antal flyttalsoperationer (flops): [ + (n k + ) ] (n k) (n k) (plus termer som är linjära i k och n) Loopen ovan utförs för k =,..., n. Summera över k ger totalt antal flyttalsoperationer: n (n k) = n + O(n ) (Lemma 8.. i kursboken) k= Slutsats: faktoriseringssteget i Gausseliminationen av ett n-gånger-n system, kräver n + O(n ) flops En liknande analys: Bakåtsubstitutionen kräver n flops Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (6 : 48) Exekveringstid Analysen ovan säger att komplexiteten för Gausselimiationen är O(n ) (faktorisering) och O(n ) (för bakåtsubstitutionen) Vad säger denna analys om exekveringstiden? Antag att det tar t f = 0 0 s/flop faktorisering bakåtsubstitution n n t f n t f 0 0.067 s 0 4 s 0 6 08 s. years 00 s Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (7 : 48) Exekveringstid Hur stort system kan lösas på en timme om datorn utför 0 Gflop/s? (Gflop = 0 9 flops) Svar: n 0 0 = 600 n 8 000 Hur stort system kan lösas på en minut? Svar: n 0 0 = 60 n 9 600 För större system kan minnessaccesser utgöra en stor del av tiden och därmed orsaka signifikanta dröjsmål! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (8 : 48)
Behovet av effektiva algoritmer n komplexiteten begränsar nyttan med Guasselimination; det är praktiskt ogörbart att lösa mycket stora ssystem Alternativ: Utnyttja, om möjligt, den struktur en har Det finns versioner av Gausselimination för bandade eller mycket glesa er En helt annan typ av algoritmer, iterativa metoder, är nödvändiga för att lösa system med mycket stora (glesa) er Denna typ av er erhålls ofta vid diskretisering av partiella differentialekvationer Matrisstorlekar i storleksordningen n = 0 8 kan förekomma för dessa problem! Sådana problem kräver stora parallelldatorer (t.ex. Abisko i Umeå) och skräddarsydda algoritmer Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (9 : 48) LU-faktorsering Vanligt problem: vi vill lösa en sekvens av linjära ekvationer som har samma system men olika högerled Ax (k) = b (k), k =,..., m Ide: faktorisera A enbart en gång: Spara U Spara faktorerna L ik i en undertriangulär L (som har or på diagonalen) Spara information om de pivoteringar (radbyten) som utförts i en P Ovanstående algoritm kallas LU-faktorisering Kan visa att LU = PA (Sats 8.6. i kursboken) Kan också visa att A är icke-singular om och endast om det finns en permutationsmatrix P, en undertriangular L med ettor på diagonalen samt en övertriangular U så att PA = LU Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (0 : 48) LU-faktorisering Givet A, beräkna L, U, P, så att LU = PA Ax = b PAx = Pb LUx = Pb [faktorisering, O(n ) flops] För varje högerled b (k) : Lös problemet Ld = Pb (k) [framåtsubstitution, O(n ) flops] för att bestämma d Lös problemet Ux (k) = d [bakåtsubstitution, O(n ) flops] för att bestämma lösningen x (k) Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48)
LU-faktorisering Vad är fördelen med LU faktorisering jämfört med vanlig Gausselimination? Ineffektiv strategi: Lös varje stystem med xi=a\bi A kommer att faktoriseras på nytt för varje högerled bi! Antal flyttalsoperationer: m( n + n ) (vi har m system som alla faktoriseras och bakåtsubstituteras) Effektiv strategi: LU-faktorisera A och lös d = L\b x = U\d Antal flyttalsoperationer: n + mn (A faktoriseras en gång, m framåt- och bakåtsubstitutioner) Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) LU-faktorisering i Matlab >> A = [ - ; 0 -; 4 -]; >> [L, U, P] = lu(a) L =.0000 0 0 0.7500.0000 0 0.500 0.000.0000 U = 4.0000.0000 -.0000 0 -.5000 4.500 0 0 -.000 P = 0 0 0 0 0 0 Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Testa om: PA = LU >> P*A ans = 4 - - 0 - >> L*U ans = 4 - - 0 - Lösning med LU-faktorisering >> b = [8; -; -4]; >> d = L\(P*b) d = -4.0000.0000 -.000 >> x = U\d x = - Kom ihåg: Backslash operatorn \ är smart ; när erna är över- eller undertriangulära så används algoritmerna för framåt- och bakåtsubstitution istället för algoritmen som löser med full Gausseliminering Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48)
LU-faktorisering i Matlab Testa om backslash är smart nog att använda LU faktorisering! >> n = 5000; >> A = rand(n,n); >> b40 = rand(n,40); b= rand(n,); >> tic;x40 = A\b40;toc Elapsed time is 7.456950 seconds. >> tic;x = A\b;toc Elapsed time is 7.5576 seconds. Matrisen b40= [b b... b 40 ] lagrar 40 högerled Matrisen x40= [x x... x 40 ] innehåller lösningarna till de linjära ekvationsssytem för högerleden i b40 40 system med samma system löses nästan lika snabbt som endast system! Detta tyder på att Matlab faktiskt använder LU-faktorisering! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (5 : 48) LU-faktorisering: exempel Matematiskt objekt 4 9 Radbyte: 4 9 Datastrukturer - -4 - - 9-4 - - - 9 Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (6 : 48) LU-faktorisering: exempel / Matematiskt objekt / 4 9 Datastrukturer -4 - - - 9 Eliminering, kolonn, med faktorerna L = /, L = /: Obs: tecken 4 / / 4 8-4 - -/ - / 4 8 Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (7 : 48)
LU-faktorisering: exempel Matematiskt objekt 4 / / 4 8 Radbyte Datastrukturer -4 - -/ - / 4 8 4 / 4 8 / -4 - / 4 8 -/ - Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (8 : 48) LU-faktorisering: exempel Matematiskt objekt 4 / 4 / 4 8 / Datastrukturer -4 - / 4 8 -/ - Eliminering, kolonn, med faktorn L = /4: 4 / 4 8 / /4-4 - / 4 8 -/ /4 - Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (9 : 48) LU-faktorisering: exempel Matematiskt objekt 4 / 4 8 / /4 Datastrukturer -4 - / 4 8 -/ /4 - Klar! Matrisversioner av datastrukturerna: L = 0 0 / 0 / /4, U = 4 0 4 8 0 0, P = 0 0 0 0 0 0 Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (0 : 48)
LU-faktorisering: exempel LU = 0 0 / 0 / /4 PA = 0 0 0 0 0 0 4 0 4 8 0 0 4 9 = = 4 9 4 9 Så vi har: LU = PA Inget extra lagringsutrymme: L (förutom diagonalelementen) och U lagras på den plats i minnet som tidigare innehöll A Information om pivoteringarna lagras i en heltalsvektor (att lagra P som en full med mest nollor vore slöseri med minne) Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Noggrannhet Ax = b Exakt lösning x (vanligtvis okänd) Avrundningsfel akkumuleras under Gausseliminationen, vilket ger en beräknad lösning x Hur noggrann är den beräknade lösningen? Naturligt test: undersök om ekvationerna är uppfyllda Residualen ska vara nära nollvektorn! b A x Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48) Residual och noggrannhet: exempel A = ( ) ( ).49 0.4479, b = A = 0.679 0.0560 >> A = [.49 0.4479;0.679 0.0560]; >> b = A*[;-]; >> xs = single(a)\single(b) xs =.6665 0 ( ).79 0.798 xs beräknad med A och b i enkelprecision >> xd = A\b xd =.0000 -.0000 xd beräknad med A och b lagrade ( som vanligt ) i dubbelprecision Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 ( : 48)
Residual och noggrannhet: exempel För enkelprecisions beräkningen: >> res_s = b - A*xs res_s =.0e-07 * -0.869 0.00 >> xs - [;-] ans = -0.5.0000 >> cond(a) ans =.05e+08 Residualen är liten: exakt upp till avrundningsfel (ungefär ɛ M i enkelprecision) Men felet är stort! Observera att det så kallade konditionstalet är högt! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48) Konditionstal och residual Slutsats: storleken på residualen är inte ett bra mått på lösningens noggrannhet Varför? Exempelproblemet ovan är illa-konditionerat (känsligt för störningar) Vi behöver ett bättre sätt att uppskatta felet än att mäta residualen! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (5 : 48) Väl-konditionerade kontra illa-konditionerade problem Koncepten väl-konditionerat och illa-konditionerat problem kan illustreras grafiskt för system med två okända: x x x x De två linjerna illustrerar vilka x och x värden som uppfyller de två ekvationerna Lösningen till ekvationssystemet ligger på skärningpunkten mellan linjerna När ekvationerna nästan beskriver samma linje så är linjerna nära varandra även långt från skärningspunkten; eller med andra ord, residualen är liten även långt från lösningen Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (6 : 48)
Normer För att mäta fel, måste vi kunna mäta storleken av vektorer och er på ett sätt som generaliserar begreppet absolutbelopp för reella tal Vi kommer att använda oss av normer Normen av en vektor x skrivs som x Det finns både vektornormer och normer Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (7 : 48) Vektornormer De vanligaste vektornormerna, för en vektor x = (x,..., x n ) T, är -normen, Euklidisk norm: x = x + x + + x n -normen -normen, max-normen Generellt, p-normen x = x + x + + x n x = max( x, x,..., x n ) ) /p x p = ( x p + x p + + x n p Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (8 : 48) Vektornormer Varför finns det olika normer? Ibland är en norm mer lämplig än andra. Ex: -normen ger det kortaste avståndet mellan två punkter fågelvägen -normen ger det kortaste avståndet mellan två punkter om man måste följa gatorna i ett rutnät! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (9 : 48)
Matrisnormer Matrisnormer definieras oftast med hjälp av en given vektornorm: Ax A = max x 0 x Ger den maximala förstoringsfaktorn som en orsakar när den appliceras på en vektor Från definitionen oven gäller för varje x 0, vilket även kan skrivas, Ax x max Ax = A () x 0 x Ax A x x Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (40 : 48) Matrisnormer Enklare formler än själva definitionen kan härledas för -, - och -normen Man kan visa att ( ) A = max A ij j i A = max i j A ij (den största -normen bland ens kolonner) (den största -normen bland ens rader) A = max(λ i (A T A)) (kvadratroten till det största egenvärdet av A T A) i - och -normerna är mycket enklare och snabbare att beräkna än -normen! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48) Elementvisa normer Det finns normer som inte induceras av vektornormer Dessa normer behandlar vanligtvis en m n som en mn vektor Användande av p-vektornormen ger m A = i=0 j=0 n A i,j p För det speciella valet p =, kallas denna norm för Frobeniusnormen m n A F = A i,j i=0 j=0 /p Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48)
Fel och konditionstal Låt A vara en icke-singular och låt b 0 vara ett högerled, samt b vara ett stört (på grund av avrudningsfel, mätfel,... ) högerled Låt x och x vara lösningarna till de linjära ekvationssystemen Ax = b and A x = b Differensen mellan ekvationssystemen ovan är A(x x) = b b Eftersom att A är icke-singular så har vi att x x = A (b b) () Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (4 : 48) Fel och konditionstal Genom att ta normen på båda sidor av uttryck () och använda egenskap () erhåller vi att x x = A (b b) A b b Division med x ger ( x 0) x x x A x b b () Eftersom b = Ax A x (även detta enligt ()) har vi x A b (4) Genom att substituera uttryck (4) in i uttyck () får vi följande begränsning av det relativa felet i lösningen x x A b b A x b Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (44 : 48) Fel och konditionstal Vi har således bevisat följande feluppskattning x x x b b κ(a) b där κ(a) = A A är konditionstalet för en A I ord: det relativa felet i x är begränsat av konditionstalet multiplicerat med det relativa felet i högerledet Fel i b kan alltså bli förstärkta med en faktor κ(a) vid lösning av det linjära ekvationssystemet Ax = b Observera att vi inte har gjort några antaganden om hur störningen ser ut eller vilken metod som används för att lösa systemet Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (45 : 48)
Fel och konditionstal Konditionstalet för en beror på valet av norm! För vårt exempel A = ( ).49 0.4479, 0.679 0.0560 κ (A) =.0 0 8 κ (A) =.7 0 8 κ (A) =.7 0 8 Det relativa felet i b är i bästa fall begränsat av ɛm, vilket är ungefär 0 6 i dubbel precision (i enkel precision är ɛ M ungefär 0 8 ) Alltså, vid lösning av ekvationssystemet kan vi förlora all noggrannhet i enkel precision (det relativa felet kan vara ); i dubbel precision kan halva noggrannheten försvinna Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (46 : 48) Konditionstal Matematiskt så är en singulär eller inte. För beräkningsändamål är det värdefullt att prata om nära singulära er Ett högt konditionstal (ett illa-konditionerat problem) antyder att en nästan är singulär Ett högt konditionstal är en egenskap hos det underliggande ekvationssystemet! Konditionstalet och lösningens störningskänslighet beror inte på vilken lösningsalgoritm som används! Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (47 : 48) Konditionstal Konditionstal fungerar som ett varningstecken Feluppskattningen som innehåller konditionstalet beskriver det västa fallet; det kan hända att felet är mycket mindre än vad feluppskattningen anger För varje inverterbar har vi följande uppskattning av konditionstalet κ(a) = A A A A = I = I bästa fall är konditionstalet, vilket innebär att det relativa felet i högerledet inte förstärks vid lösning av linjära ekvationssystem Eddie Wadbro, Tema : Nätverk och linjära system, November, 04 (48 : 48)