Exempel Frå labbe: Block : Lijära system Del Trampolies böjig och motsvarade matris (här 60*60-matris) Matrise är ett exempel på - gles matris (huvuddele av elemete ollor) - badmatris Frå labbe Beräkigstid ökar kraftigt med ökade storlek. Frå labbe Med LU-faktoriserig ka ma lösa måga system på ästa samma tid som ett sparar exekverigstid Beräkig med \ (Gausselimiatio) lite mer ä dubbelt så sabbt som iv(a) E första programmerigsstruktur, for-loop, t ex for i=: for i lika med till v(i) = ed I stora drag Ca 60-70% av exekverigstide i beräkigsprogram Grudalgoritmer: Gausselimierig med radpivoterig Framåtsubstitutio, bakåtsubstitutio Speciella algoritmer för exempelvis stora, glesa ekvatiossystem Löpsedel Dages föreläsig Grudalgoritmera: LU-faktoriserig, bakåt- och framåtsubstitutio Gausselimierig är istabil - radpivoterig för att stabilisera Exekverigstid Kursboke: Kap (8., 8.), 9.., 9., 9., 0., 0., 0.
Mål Lij algebra BerVet Represetatio i dator Måle här jämfört med matematikurse Lijär algebra Mål i matematikkurse att kua lösa små ekvatiossystem för had att teoretiskt förstå egeskaper hos lijära ekvatiossystem i allmähet Mål i vår kurs att kua lösa stora ekvatiossystem med dator att förstå de datorapassade algoritmera och deras egeskaper. Ekvatiossystemet skrivs som matris/ vektor: Ax = b där A är e -matris x och b är -vektorer (kolovektorer av lägd ). I dators mie lagras ekvatiossystemet geom att vi lagrar matrise A och vektor b => ekvatiossystemet represeteras med A och b i dator. Algoritmera gausselimierig och bakåtsubstitutio Gausselimierig grudalgoritme Matlabs backslash -operator (\) löser systemet Ax = b: >> x = A\b \ aväder Gausselimiatio baserad på s k LU-faktoriserig som stadard Itelliget operator väljer automatiskt olika metoder beroede på problemet som ska lösas (hur matrise ser ut) Grudalgoritme består av algoritmer:. LU-faktoriserig, dvs Gausselimierig av ebart matrise A => matris L, U. Framåtsubstitutio Systemet Ld = b löses => lösige d. Bakåtsubstitutio Systemet Ux = d löses =>lösige x Pukt dyr (måga operatioer), pukt och billiga i jämförelse. Gausselimierig i Matlab Algoritme framåtsubstitutio, pseudokod Backslash: \ t ex x=a\b LU-faktoriserig: [L,U,P]=lu(A); Framåtsubstitutio d=l\(p*b); Bakåtsubstitutio x=u\d; - Backslash iehåller de tre stege - Om matrise ser ut som L och U, utför backslash istället framåt- respektive bakåtsubstitutioe Idata: L, b, Efter LU-faktoriserig fis L. är problemstorlek d = zeros(,) d() = b() for i = : d(i) = ( b(i) L(i,:i-)*d(:i-) ) ed
Algoritme bakåtsubstitutio, pseudokod Idata: U, d, x = zeros(,); x() = d()/u(,) for i = -, -,, : x(i) = ( d(i) U(i,i+:)*x(i+:) )/U(i,i) ed Exekverigstid Hur låg tid kommer det att ta för e dator att exekvera (utföra/köra) algoritmera? Hur kommer exekverigstide i Matlab att bli är vi gör kommadot x = A\b? Lämpligt med ett datoroberoede mått på exekverigstide. Ma talar om e algoritms komplexitet. Komplexitet hos gausselimierig Ett lämpligt komplexitetsmått är atal aritmetiska operatioer (+, -, *, /) Exekverigstide kommer väsetlige att vara proportioell mot detta atal Det itressata är: hur beror exekverigstide på atalet ekvatioer,? Vi vill alltså uttrycka komplexitete som e fuktio av Komplexitetsaalys av framåtsubstitutio d() = b() for i = : d(i) = ( b(i) L(i,:i-)*d(:i-) ) ed I varje varv i loope, dvs för varje i utförs i- i operatioer. I sitt blir det /, dvs operatioer varje varv. Detta upprepas gåger i loope, dvs totalt aritmetiska operatioer. Komplexitetsaalys (forts) Framåtsubstitutio kostar operatioer, eller O ( ) På samma sätt ka ma visa att bakåtsubstitutio kräver ca aritmetiska operatioer, eller O ( ) LU-faktoriserig (Gausselimierig av matrise) kräver ca ⅔ aritmetiska operatioer, eller O ( ) operatioer (krågligare att visa) Totalt för lösig av ett lijärt ekvatiosystem: ⅔ + eller ( ) O Komplexitetsaalys (forts) Gausselimiatio jfr. med bakåtsubst Vad domierar?
Komplexitetsaalys (forts) Komplexitetsaalys (forts) Vad blir det här i tid? Atag t f = 0-9 s/flyttalsoperatio (s/flop) på e viss dator Gausselimierig Bakåtsubstitutio (/) t f t f 0 0.67 s 5 * 0 - s 0 6 0.67*0 9 s 500 s 8. mi år Hur stort system ka lösas på e timme om dator klarar Gflop/s? (Gflop = miljard flyttalsoperatioer) (/) 0-9 s = tim = 600 s => 8000 Hur stort system ka lösas på e miut? 0.67 0-9 s = 60 s => 500 Behov av effektiva algoritmer Behov av effektiva algoritmer Komplexitete O( ) begräsar avädbarhete hos gausselimierig Alterativ: Utyttja struktur hos koefficietmatrise om möjligt (exempelvis badmatriser). Fortfarade gausselimierig me lägre komplexitet. Iterativa metoder för mycket stora, glesa system (igår ej i dea kurs) LU-faktoriserig (se lägre fram) Dessutom aväda speciella högpresterade datorer Ma löser system med äda upp 0 9 obekata Aväder speciella datorer, t ex grids, och speciella beräkigsmetoder Valigt att lösig av partiella diffar leder till stora lijära ekvatiossystem Problem: Naiv gausselimierig ej stabil Om multiplikator l ik > så kommer multiplikatio med l ik att förstora avrudigsfel I algoritme fis Fele förstoras här A(i,k:) <= A(i,k:) l ik *A(k,k:) där elemete i A iehåller olika fel, t ex avrudigsfel. Om l ik är stor till belopp förstoras dessa fel successivt i processe Stabilisera algoritme geom att iföra radpivoterig Åtgärd: Radpivoterig För varje y kolum som ska ollställas: Hitta det elemet i kolume, frå diagoelemetet och edåt, med störst belopp Byt plats på rader så att detta elemet hamar i pivotpositio När multiplikator l ik skapas divideras det då med det till belopp största elemetet i koloe Resultat: l ik, algoritme blir stabil
Gausselimierig med radpivoterig Samma exempel (vi bildar ite Aug här): k=: 0 Radbyte: 0 8 8 k=: Radbyte: 0 5 5 7 7 8 0 0 l = / l = / l = / 5 = 5 5 7 0 0 x = x = x = 5 Ka u lösa ut x bakläges bakåtsubstitutio: Slutlige, de fullstädiga algoritme Lagra radbyte i e matris/vektor Gausselimiera ebart matrise först med LU-faktoriserig, seda applicera på högerledet LU-faktoriserig Matematiskt objekt Matris Radbyte: 0 9 Datastruktur Matris Vektor p - 0 - - - 0 - - LU-faktoriserig Elimierig av x : L =/, l =/ 5 7 Radbyte: 5 7 - / -/ -/ / -5/ 7/ 5 7 OBS! Hela rade byter plats LU-faktoriserig Elimierig av x : l =/5 5 7 0 0 5 7 5 0 Klart! Tolkig av datastruktureras iehåll: 0 0 L = 0 U = 5 5 7 0 0 P = 0 0 0 0 0 0 5
LU-faktoriserig LU-faktoriserig 0 0 LU = 0 5 PA = 0 0 0 0 0 0 5 7 0 0 = = Slutsats: LU = PA Detta kallas LU-faktoriserig L och U sparas i A:s miesutrymme P lagras som e vektor, iga ollor lagras Nu återstår framåt- och bakåtsubstitutio Sätt d = Ux Ld = Pb: 0 0 0 5 d d d = Lös Ux = d : 5 7 0 0 x x x 8 = d = d = (8 ( )) = d = ( ( ) 5 ) = 5 5 x = x = x = x = Har u utfört Ax = b PAx = Pb LUx = Pb LU-faktoriserig Valig situatio: Följd av ekvatiossystem med samma koefficietmatris, olika högerled (jfr trampoliexemplet) Ax (k) = b (k), k =,..., m Idé: - Gausselimiera A e gåg för alla geom LU-faktoriserig - Utför seda framåt- och bakåtsubstitutio på högerlede LU-faktoriserig, avädig Utför e gåg: LU-faktoriserig Ax = b => PAx = Pb => LUx = Pb För varje högerled b : - Ld = Pb (framåtsubstitutio) Bestäm d (vektor) - Ux = d (bakåtsubstitutio) Bestäm lösige x Iebär att ma skiljer Gausselimiatioe frå haterig av högerledet först elimieras ebart matrise, seda applicera på högerledet LU-faktoriserig, vist LU-faktoriserig i Matlab Ieffektivt: Lös varje system med x = A\b (gausselimierig av A för varje ytt högerled) m( + ) aritmetiska operatioer Effektivt: LU-faktorisera A (lu(a) i Matlab) och lös seda varje system med - d = L\b - x = U\d + m aritmetiska operatioer >> A=[ - ; 0 -; -]; >> b= [8;-;-]; >> [L,U,P]=lu(A) L =.0000 0 0 0.7500.0000 0 0.500 0.000.0000 U =.0000.0000 -.0000 0 -.5000.500 0 0 -.000 P = 0 0 0 0 0 0 6
LU-faktoriserig i Matlab Stämmer PA=LU? >> P*A as = - - 0 - >> L*U as = - - 0 - Lösig >> d = L\(P*b) d = -.0000.0000 -.000 >> x = U\d x = - Backslash aväder algoritmera för framåtoch bakåtsubstitutio är matrisera är uder- respektive övertriagulära LU-faktoriserig i Matlab Aväder backslash LU-faktoriserig? Litet test: >> = 000; >> A = rad(,); >> b0 = rad(,0); b = rad(,); >> tic; x = A\b0; toc Elapsed time is 5.55007 secods. >> tic; x = A\b; toc Elapsed time is 5.79 secods. 0 system med samma matris löses ästa lika fort som system => LU-faktoriserig OBS 0 högerled lagrade [b b b 0 ] 7