/ 94 - a LU LU Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague
- a LU LU 2-3 4 a LU 5 LU 6 7 8 9 2 / 94
Gaussova eliminační metoda - a LU LU jde o přímou metodu pro řešení lineárních algebraických soustav nebo pro výpočet inverzní matice budeme uvažovat pouze regulární matice A C n,n na základě této metody je odvozeno mnoho modifikací metoda se skládá ze dvou fází přímý chod - spočívá v převedení úlohy A x = b na úlohu U x = d se stejným řešením x jako původní úloha, s horní trojúhelníkovou maticí U a modifikovanou pravou stranou d zpětný chod - spočívá v řešení úlohy U x = d pomocí zpětné substituce 2 / 94
3 / 94 - a LU LU Gaussova eliminační metoda - přímý chod Mějme regulární matici A C n,n a pravou stranu b C n Řešíme úlohu: a a 2 a n x b a 2 a 22 a 2n x 2 b 2 a n a n2 a nn x n = b n Předpokládáme, že první diagonální prvek a je nenulový Nazveme ho hlavním prvkem nebo pivotem v prvním kroku Podělíme první řádek soustavy číslem a a dostaneme:
4 / 94 - a LU LU Gaussova eliminační metoda - přímý chod u 2 u n a 2 a 22 a 2n a n a n2 a nn x x 2 x n kde u j = a j a pro j = 2, n a d = b a = d b 2 b n, Nyní odečteme jeho a i násobek od každého i-tého řádku pro i = 2, n Tím jsme vynulovali první sloupeček od druhého do posledního řádku
5 / 94 Gaussova eliminační metoda - přímý chod - a LU LU kde u 2 u n 0 a () 22 a () 2n 0 a () n2 a () nn x x 2 x n a () ij = a ij a i u j, b () i = b i a i d = d b () 2 b () n, pro i, j = 2,, n
6 / 94 - a LU LU Gaussova eliminační metoda - přímý chod V dalším kroku použijeme stejný postup na soustavu a () 22 a () 2n a () n2 a () nn která má o jedna menší rozměry x 2 x n = b () 2 b () n,
- a LU LU Gaussova eliminační metoda - přímý chod Po n krocích dojdeme k soustavě u 2 u 3 u n u 23 u 2n u n n x x 2 x n x n = kde v k-tém kroku počítáme pro i, j = k +,, n u kj = a(k ) kj a (k) a (k ) kk ij = a (k ) ij i = b (k ) i b (k), d k = b(k ) k a (k ) kk a (k ) ik u kj, a (k ) ik d k,, d d 2 d n d n, a definujeme a (0) ij = a ij a b (0) i = b i 7 / 94
8 / 94 - a LU LU Gaussova eliminační metoda - přímý chod pozor, v kódu indexujeme od 0 do n f o r ( i n t k = 0; k < n ; k++ ) 2 { 3 / 4 Deleni k teho radku pivotem 5 / 6 b [ k ] = b [ k ] / A [ k ] [ k ] ; 7 for ( i n t i = n ; i >= k ; i ) 8 { 9 A [ k ] [ i ] = A [ k ] [ i ] / A [ k ] [ k ] ; 0 } 2 / 3 Eliminace prvku pod pivotem 4 / 5 f o r ( i n t j = k +; j < n ; j ++ ) 6 { 7 / 8 Odecitani k teho radku od j teho 9 / 20 b [ j ] = b [ j ] A [ j ] [ k ] b [ k ] ; 2 f o r ( i n t i = k +; i < n ; i ++ ) 22 { 23 A [ j ] [ i ] = 24 A [ j ] [ i ] A [ j ] [ k ] A [ k ] [ i ] ; 25 } 26 A [ j ] [ k ] = 0 0; 27 } 28 }
9 / 94 - a LU LU Gaussova eliminační metoda - zpětný chod nyní řešíme soustavu s horní trojúhelníkovou maticí a pravou stranou d z poslední rovnice je snadno vidět, že x n = d n z předposlední rovnice a ze znalosti x n snadno dostaneme x n = d n u n,n x n obecně pak je pro k = n, x k = d k n i=k+ u ki x i
0 / 94 - a LU LU Gaussova eliminační metoda - zpětný chod f o r ( i n t k = n ; k >= 0; k ) 2 { 3 x [ k ] = b [ k ] ; 4 f o r ( i n t j = n ; j > k ; j ) 5 x [ k ] = x [ k ] A [ k ] [ j ] x [ j ] ; 6 }
/ 94 - a LU LU Gaussova eliminační metoda - složitost 3 / 4 Deleni k teho radku pivotem 5 / 6 b [ k ] = b [ k ] / A [ k ] [ k ] ; 7 f o r ( i n t i = n ; i >= k ; i ) 8 { 9 A [ k ] [ i ] = A [ k ] [ i ] / A [ k ] [ k ] ; 0 } na řádku 6 provádíme jedno dělení a jedno přiřazení 2 operace na řádku 9 provádíme také jedno dělení a jedno přiřazení 2 operace řádek 9 je vnořen do cyklu, ve kterém se vždy provádí jedno porovnání (i >= k) a jedna dekrementace (i- -) 2 operace cyklus se provede n-k-krát 4(n k) operací přičteme 2 operace za řádek 6 a 2 operace za přiřazení i=n- z inicializace proměnné i v cyklu na řádku 7 celkem máme 4 + 4(n k) operací
2 / 94 - a LU LU Gaussova eliminační metoda - složitost přímého chodu 2 / 3 Eliminace prvku pod pivotem 4 / 5 f o r ( i n t j = k +; j < n ; j ++ ) 6 { 7 / 8 Odecitani k teho radku od j teho 9 / 20 b [ j ] = b [ j ] A [ j ] [ k ] b [ k ] ; 2 f o r ( i n t i = k +; i < n ; i ++ ) 22 { 23 A [ j ] [ i ] = 24 A [ j ] [ i ] A [ j ] [ k ] A [ k ] [ i ] ; 25 } 26 A [ j ] [ k ] = 0 0; 27 } Obdobně dostáváme: 3 operace na řádcích 23 a 24 2 operace v každém cyklu smyčky na řádku 20 celkem pro smyčku na řádcích 2 25 pak 5(n k ) + 2 na řádku 20 provádíme 3 operace uvnitř smyčky začínající na řádku 5, provádíme tedy 5(n k ) + 5 přidáme ještě 2 operace za porovnání a inkrementace ve smyčce 5(n k ) + 7 smyčka se provede (n k )-krát celkem tedy (včetně inicializace smyčky) [ ] 2+(n k ) [5(n k ) + 7] = 2+5 (n k ) 2 + 5(n k )
3 / 94 - a LU LU Gaussova eliminační metoda - složitost přímého chodu přičteme 4 + 4(n k) operací za řádky 3 0 vnitřek smyčky začínající na řádku, tedy obsahuje 4 + 4(n k) + 2 + 5(n k ) 2 + 25(n k ) + }{{}}{{}}{{} 2 = r3 0 r2 27 r5;j=k+ = 5k 2 k(0n + 9) + n(5n + 9) 2 operací to vše je uvnitř smyčky iterující pro k =, n počítáme tedy sumu n 5k 2 k(0n + 9) + n(5n + 9) 2 + }{{} 2 k= k<n;k++ + }{{} () k=0
4 / 94 - a LU LU Gaussova eliminační metoda - složitost přímého chodu využijeme zde znalosti z prvního ročníku pro sčítání sumy n k 2 = n(n + )(2n + ) 6 k= celkový výsledek je n k= [ ] 5k 2 k(0n + 9) + (5n + 9)n 0 + = 5 3 n3 + 7n 2 8 2 3 n + n3
5 / 94 - a LU LU Gaussova eliminační metoda - složitost přímého chodu při asymptotické analýze nás zajímá pouze asymptotické chování výsledného vztahu pro n zajímá nás proto pouze nejrychleji rostoucí člen celého výsledku, tj n 3 ten vznikl ze sumy n k= k 2 v sumě () ostatní členy této sumy jsme proto klidně mohli zanedbat stejně tak není důležitá konstanta 5 před k 2 ve stejné sumě proto také nemusíme odvozovat přesný počet operací, jen jejich řádový počet na CPU navíc stejně zpracování každé operace trvá různě dlouho, takže přesný výraz pro časovou náročnost není možné získat
- a LU LU Gaussova eliminační metoda - složitost přímého chodu zjednodušeně tak lze postupovat takto: v přímém chodu postupně v n krocích eliminujeme nenulové prvky pod diagonálou v k-tém kroku této úpravy nejprve dělíme k-tý řádek pivotem tj n k operací následně musíme v každém řádku s indexem k +,, n upravit prvky se sloupcovými indexy k,, n to je celkem (n k + ) 2 operací celý přímý chod tak zabírá (n k můžeme zanedbat, je řádově menší) n (n k + ) 2 n 3 operací k= 6 / 94
7 / 94 - a LU LU Gaussova eliminační metoda - složitost zpětné substituce zpětný chod budeme analyzovat již stručněji ve zpětném chodu celkem v n krocích postupně napočítáváme hodnoty řešení x n v každém kroku k od hodnoty d n k+ odečítáme násobky již napočítaných složek řešení vektoru x, kterých je n k + celková složitost je n n k + n 2 k=
8 / 94 - Gaussova eliminační metoda - složitost zpětné substituce a LU LU složitost n 3 je velmi nepříjemná je vhodná pro malé matice, ale pro velké je neúnosně pomalá
9 / 94 - a LU LU Gaussova eliminační metoda - výpočetní příklady Příklady lze nejsnáze zkoušet v systému Linux Pod Windows lze provozovat Linux virtuálně pomocí např VMware wwwvmwarecom/go/tryplayerpro-win-64 nebo VirtualBox wwwvirtualboxorg následně lze nainstalovat např Ubuntu Linux wwwubuntucom/download/desktop zdrojové kódy s numerickými metodami lze získat na adrese gitlabcom/oberhubertomas/fjfi-num-src tlačítkem Download vedle History a Find file # R o z b a l i t a r c h i v se zdrojovymi kody 2 t a r x v f f j f i num src master <ID > t a r gz 3 # Presunout se do vytvoreneho adresare 4 cd f j f i num src master <ID> 5 # P r e l o z i t zdrojove kody 6 make 7 #Pripadne j e mozne j e n a i n s t a l o v a t do $ {HOME} / l o c a l / bin 8 make i n s t a l l
20 / 94 - a LU LU Gaussova eliminační metoda - výpočetní příklady metoda je implementovaná v programu bin/gem-solver má tyto parametry --input-file maticemtx soubor ve formátu mtx se vstupní maticí pravá strana se napočítá tak, aby řešením byl vektor ze samých jedniček --pivoting yes/no zapíná pivoting pro vyšší stabilitu (viz další část přednášky) --verbose n nastavuje úroveň vypisovaných informací v průběhu výpočtu
2 / 94 - a LU LU Example Gaussova eliminační metoda - výpočetní příklady v adresáři data je několik malých vzorových matic vyzkoušejte následující výpočty bin / gem s o l v e r input f i l e data / matrix mtx verbose 0 2 bin / gem s o l v e r input f i l e data / matrix mtx verbose 3 bin / gem s o l v e r input f i l e data / matrix mtx verbose 2
- a LU LU Example 2 Gaussova eliminační metoda - výpočetní příklady na stránkách http://mathnistgov/matrixmarket/ http://sparsetamuedu najděte jiné matice a ozkoušejte rychlost a stabilitu Například: bin / gem s o l v e r input f i l e bcsstk0 mtx 2 bin / gem s o l v e r input f i l e bcsstk06 mtx 3 bin / gem s o l v e r input f i l e bcsstk mtx 22 / 94
23 / 94 - a LU LU Pravidla o elementárních úpravách Definition 3 Elementární úpravou provedenou v obdélníkové matici A C n,n nazveme: násobení všech prvků zvoleného i-tého řádku resp sloupce číslem α přičtení α-násobku prvků zvoleného j-tého řádku resp sloupce k prvkům i-tého řádku resp sloupce
24 / 94 - a LU LU Pravidla o elementárních úpravách Remark 4 Násobení i-tého řádku resp sloupce matice A číslem α je ekvivalentní násobení matice A zleva resp zprava maticí 0 0 0 α 0 0 0, s číslem α na i-tém řádku
- a LU LU Pravidla o elementárních úpravách Remark 5 Přičtení α-násobku prvků zvoleného j-tého řádku resp sloupce matice A k jejímu i-tému řádku resp sloupci je ekvivalentní násobení matice A zleva resp zprava maticí 0 0, α 0 0 tj s maticí s jedničkami na diagonále a číslem α na i-tém řádku a j-tém sloupci 25 / 94
26 / 94 - Pravidla o elementárních úpravách a LU LU Remark 6 Provedeme-li na řádky resp sloupce obdélníkové matice A konečný počet elementárních úprav, je výsledek stejný, jako když matici A vynásobíme zleva resp zprava maticí, která vznikne z matice I stejnými úpravami
27 / 94 - a LU LU Gaussova eliminační metoda - nyní si popíšeme v maticovém tvaru, který nám pomůže odvodit, za jakých podmínek lze tuto metodu použít pro zjednodušení zápisu si zavedeme rozšířenou matici soustavy a a 2 a n b a 2 a 22 a 2n b 2 P = a n a n2 a nn b n
28 / 94 - a LU LU Gaussova eliminační metoda - na konci prvního kroku přímého chodu má rozšířená matice soustavy tvar u 2 u n d P () 0 a () = 22 a () 2n b () 2 0 a () n2 a () nn b () n toho bylo dosaženo vhodnými elementárními úpravami víme, že každou tuto úpravou lze popsat pomocí vhodné matice
29 / 94 - a LU LU Gaussova eliminační metoda - vydělení prvního řádku matice P číslem a je ekvivalentní vynásobení matice P zleva maticí M () = a
30 / 94 - a LU LU Gaussova eliminační metoda - přičtení a 2 násobku prvního řádku k druhému řádku je ekvivalentní vynásobení matice P zleva maticí a 2 M () 2 =
3 / 94 - a LU LU Gaussova eliminační metoda - přičtení a k násobku prvního řádku ke k-tému řádku je ekvivalentní vynásobení matice P zleva maticí M () k = a k
32 / 94 - a LU LU Gaussova eliminační metoda - dohromady pak je M () = M () n M () = a a 2 a a n a
33 / 94 - a LU LU Gaussova eliminační metoda - obecně před zahájením k-tého kroku máme matici P (k ) tvaru u 2 u k u n d u 2k u 2n d 2 u k,k u k,n d k a (k ) kk a (k ) kn a (k ) nk a (k ) nn b (k ) k b (k ) n
34 / 94 - a LU LU Gaussova eliminační metoda - na konci k-tého kroku máme matici P (k) tvaru u 2 u k u,k+ u n d u 2k u 2,k+ u 2n d 2 u k,k u k,k+ u k,n d k u k,k+ u kn d k a (k) k+,k+ a (k) k+,n a (k) n,k+ a (k) nn b (k) k+ b (k) n
35 / 94 - a LU LU Gaussova eliminační metoda - toho jsme dosáhli násobením matice P (k ) zleva maticí M (k) tvaru a (k ) kk a(k ) k+,k a (k ) kk a(k ) nk a (k ) kk
36 / 94 - a LU LU Gaussova eliminační metoda - na konci přímého chodu máme matici P (n) tvaru u 2 u n d u 2n d 2 u n,n d n d n přitom platí P (n) = M (n) M (n ) M () P = MP, kde jsme definovali M = M (n) M (n ) M ()
37 / 94 - a LU LU Gaussova eliminační metoda - v blokovém zápisu pak vidíme, že ( MP = MA, M ) b pokud zavedeme značení pak dostáváme P (n) = ( U, ) d, U = MA A = M U
- a LU LU Gaussova eliminační metoda - jelikož M je dolní trojúhelníková, víme, že i M je dolní trojúhelníková a její diagonální prvky jsou převrácené hodnoty diagonálních prvků matice M diagonálu matice M tedy tvoří prvky { } a, a () 22 an nn definujme matici pak lze psát D = diag A = ( ) a, a () 22 an nn, ( M D ) DU, kde matice M D má jedničky na diagonále dostali jsme tak tvaru A = LDR 38 / 94
39 / 94 - a LU LU Gaussova eliminační metoda - víme, že A = LDR existuje jen pro silně regulární matice to vyžaduje, aby všechny "horní levé" čtvercové "podmatice" byly regulární to bude tehdy, když během výpočtu nenarazíme na nulového pivota provedeme přesný důkaz
40 / 94 - a LU LU Gaussova eliminační metoda - Theorem 7 Základní lze provést právě tehdy, když matice lineární soustavy A je silně regulární
40 / 94 - a LU LU Gaussova eliminační metoda - Theorem 7 Základní lze provést právě tehdy, když matice lineární soustavy A je silně regulární Co když ale matice není silně regulární, ale přitom je regulární? Víme, že řešení soustavy existuje a rádi bychom ho nějak získali
4 / 94 - a LU LU Gaussova eliminační metoda pokud matice soustavy není silně regulární, nastane situace, že se objeví nulový pivot a (k ) kk řešením je zvolit za vedoucí prvek některý jiný nenulový z matice a (k ) kk a kn (k ) a (k ) nk a nn (k ) jelikož matice A je regulární, nemůže být uvedená submatice nulová pro úvahu nad tím, jak vybrat nejlepšího pivota se podívejme na následující příklad
42 / 94 - a LU LU Gaussova eliminační metoda Example 8 Co způsobí malý pivot v aritmetice s konečnou přesností F (0, 2, 5, 5)? Mějme následující soustavu a provádějme základní 0 5 2 3 2 2 3 3 3 0 5 2 0 5 0 5 3 2 2 3 3 3 0 5 2 0 5 0 5 0 2 3 0 5 6 0 5 3 0 5 0 3 2 0 5 3 4 0 5 3 2 0 5 0 5 2 0 5 0 5 0 3 0 5 6 0 5 3 0 5 0 2 0 5 4 0 5 2 0 5 vidíme, že poslední dva řádky jsou lineárně závislé došlo k tomu, že díky dělení malým pivotem vznikl extrémně velký řádek, který pak přebil všechny následující řádky
43 / 94 - a LU LU Gaussova eliminační metoda Example 9 Naopak velký pivot v aritmetice s konečnou přesností F (0, 2, 5, 5) se bude chovat následovně 0 5 2 3 2 2 3 3 3 0 5 2 0 5 0 5 3 2 2 3 3 3 0 5 2 0 5 0 5 0 2 3 0 5 6 0 5 3 0 5 0 3 2 0 5 3 4 0 5 3 2 0 5 0 5 2 0 5 0 5 0 2 0 3 3 3 po vydělení jsme dostali hodně velký řádek, který při následných úpravách zbytek matice ovlivnil jen málo došlo také k výpočetním chybám, ale takovým, které příliš neovlivní následující výpočet
44 / 94 - a LU LU Gaussova eliminační metoda modifikovaná tedy spočívá ve výběru vhodného pivota z předchozích úvah plyne, že je nejlepší vybírat za pivota velké prvky (v absolutní hodnotě), např největší prvek z matice a (k ) kk a kn (k ) a (k ) nk a nn (k ) pokud se nachází v i-tém řádku a j-tém sloupci, provedeme prohození i-tého a k-tého sloupce a j-tého a k-tého řádku a dál pokračujeme jako u běžné nevýhoda tohoto postupu je, že musíme vždy prohledávat k 2 prvků a prohazovat i řádky proto často vybíráme v absolutní hodnotě největší prvek z k-tého sloupce
45 / 94 - Gaussova eliminační metoda a LU LU v obou případech získáme nakonec permutaci řádků nebo i sloupců, která převede původně pouze regulární matici na silně regulární
46 / 94 a více pravých stran - a LU LU s výhodou lze využít toho, že přímý chod, který je mnohem pomalejší než zpětný, lze provést s několika pravými stranami aniž by se výpočet výrazně zpomalil zpětný chod sice musím provést pro každou pravou stranu zvlášt, ale je řádově rychlejší než přímý, takže to tolik nevadí v praxi ale bohužel většinou pravé strany získáváme postupně, tj po vyřešení soustavy s jednou pravou stranou jsme schopni napočítat další pravou stranu ukážeme si metodu, která umí novou pravou stranu rychle převést na tvar vhodný pro zpětný chod jde vlastně o LU
47 / 94 a LU - a LU LU ukázali jsme si, že výsledek je A = M U = LU dostáváme tak A x = b LU x = b označíme-li dostáváme U x = d L d = b
a LU - a LU LU úlohu A x = b jsem převedli na úlohu A = LU L d = b U x = d jelikož matice L a U jsou trojúhelníkové, je vyřešení soustav v druhém a třetím kroku velmi rychlé (O(n 2 )) první krok má složitost n 3 (bude vidět později), ale je nezávislý na pravé straně b matice na horní a dolní trojúhelníkovou se většinou označuje jako LU podle lower and upper triangular matrix ukážeme si, jak získat LU pomocí 48 / 94
49 / 94 - a LU LU a LU zajímá nás, jak vypadá matice L = M víme, že M se rovná součinu matic M (k), které reprezentují všechny elementární úpravy provedené v k-tém kroku přímého chodu tj a tedy je M = M (n) M (n ) M () M = (M ()) (M (2)) (M (n)) nyní nás tedy zajímá, jak získat inverzní matici ( M (k) ) pro k-tý krok přímého chodu
50 / 94 a LU - a LU LU ze vztahu M (k) = M (k) n M (k) k plyne (M (k)) ( ) ( = M (k) k M (k) n ) budou nás tedy zajímat inverzní matice k maticím elementárních úprav
5 / 94 a LU - a LU LU matice M (k) k odpovídá elementární úpravě vydělení k-tého řádku číslem a (k ) kk M (k) k = a (k ) kk
52 / 94 - a LU LU a LU k ní inverzní matice tedy musí odpovídat opačné elementární úpravě, tj násobení k-tého řádku stejným číslem platí tedy ( M (k) k ) = a (k ) kk
53 / 94 a LU - a LU LU matice M (k) i pro i > k odpovídá elementární úpravě odečtení a (k ) ik násobku k-tého řádku od i-tého M (k) i = a (k ) ik
54 / 94 - a LU LU a LU k ní inverzní matice tedy musí odpovídat opačné elementární úpravě, tj přičtení a (k ) ik násobku k-tého řádku k i-tému platí tedy ( M (k) i ) = a (k ) ik
55 / 94 a LU - a LU LU ze znalosti inverzních matic k jednotlivým elementárním úpravám již můžeme získat inverzní matici k matici vyjadřující elementární úpravy v k-tém kroku přímého chodu jelikož M (k) = M (k) n (M (k)) = ( M (k), platí, že M (k) k k ) ( již víme, že při součinu matic M (k) k+ ) ( M (k) n ( ) M (k) ( k+ ) M (k) n vlastně provádíme "sjednocení" nenulových prvků všech matic )
56 / 94 - a LU LU ( je tedy M (k) k ) ( a LU M (k) n ) = a (k ) k,k a (k ) k+,k a (k ) n,k dále platí, že M = ( M ()) ( M (2) ) ( M (n) )
57 / 94 - a LU LU Lemma 0 Pro i < j platí aii a i+,i a ni aii a i+,i b jj b j+,j a ni b nj a LU 0 = bjj b j+,j b nj
58 / 94 a LU - a LU LU Z předchozího lemmatu dostáváme, že M = a a 2 a () 22 a 3 a () 32 a (2) 33 a k a () k2 a (k 2) k,k a (k ) kk a n a () n2 a (n ) nn
59 / 94 - a LU LU a LU při výpočtu LU u je dobré využít faktu, že nemusíme ukládat jedničky na diagonále horní trojúhelníkové matice tím získáváme dostatek prostoru pro uložení dolní trojúhelníkové matice v praxi opravdu v paměti počítače pracujeme jen s jednou maticí, která na počátku obsahuje prvky matice A a s tím, jak nulujeme její prvky pod diagonálou získáváme volné místo pro prvky dolní trojúhelníkové matice pokud se nyní podíváme na prvky matice M, vidíme, že jsou to přesně prvky, které vznikají pod diagonálou během přímého chodu k získání LU u nám tak vlastně stačí nenulovat prvky pod diagonálou během přímého chodu při si tak ušetříme práci a jako bonus získáme LU pro případ, že bychom řešili stejnou soustavu jen s jinou pravou stranou v literatuře se tak často místo mluví o LU u, jsou to vlastně ekvivalentní úlohy, ale LU je o něco rychlejší a užitečnější
60 / 94 - a LU LU a LU f o r ( i n t k = 0; k < n ; k++ ) 2 { 3 / 4 Deleni k teho radku pivotem 5 / 6 f o r ( i n t i = n ; i > k ; i ) 7 { 8 A [ k ] [ i ] = A [ k ] [ i ] / A [ k ] [ k ] ; 9 } 0 / 2 Uprava o s t a t n i c h radku 3 / 4 f o r ( i n t j = k +; j < n ; j ++ ) 5 { 6 / 7 Odecitani k teho radku od j teho 8 / 9 f o r ( i n t i = k +; i < n ; i ++ ) 20 { 2 A [ j ] [ i ] = 22 A [ j ] [ i ] A [ j ] [ k ] A [ k ] [ i ] ; 23 } 24 } 25 }
6 / 94 LU - a LU LU máme-li napočítaný LU, lze řešit soustavu A x = b se složitostí n 2, dokonce se stejným počtem operací, jako u násobení čtvercové matice a vektoru navíc jen n dělení proto se LU někdy považuje za ekvivalent inverzní matice
- a LU LU Example Mějme matici A = 2 3 2 3 4 2 0 Provedeme její LU 2 3 2 3 A = 2 3 0 5 4 2 0 0 6 2 2 3 0 5 0 0 Příklad 2 3 0 5 0 0 8 62 / 94
63 / 94 - a LU LU M k = a (k ) kk a(k ) k+,k a (k ) kk a(k ) nk a (k ) kk 0 0 M = 2 0, M 2 = 4 0 0 0 (M ) = 2 0, (M 2 ) = 4 0, (M k ) 0 0 0 0, M 3 = 0 6 Příklad a (k ) k,k a (k ) k+,k a (k ) n,k 0 0 0 0 0 0 8 0 0 0 0, (M 3 ) = 0 6 0 0 0 0 0 0 8
64 / 94 - a LU LU 0 0 M = 2 0 4 9 3 8 A = M U = LU =, M = 0 0 2 0 4 6 8 Příklad 0 0 2 0 4 6 8, 2 3 0 5 0 0 Necht b = (6, 6, 6) T, pak řešíme A x = b jako LU x = b, tj Dostáváme U x = d, L d = b d = (6, 6, ) T, x = (,, ) T
65 / 94 - a LU LU LU faktorizaci je také známo jako Croutova nebo Doolittlova faktorizace vychází ze vztahu a ij = min(i,j) k= l ik u kj a předpokládáme, že u ii = pro i =,, n Croutova metoda pro j = a i =, n je a i = l i u l i = a i pro i = a j = 2, n je a j = l u j = u j u j = a i /l
66 / 94 - a LU LU pro j = 2 a i = 2, n LU faktorizaci a i2 = l i u 2 + l i2 u 22 l i2 = a i2 l i u 2 pro i = 2 a j = 3,, n je a 2j = l 2 u j + l 22 u 2j u 2j = (a 2j l 2 u j )/l 22
67 / 94 - a LU LU LU faktorizaci obecně tak vidíme, že pro pevně daný sloupec j a i = j,, n je a ij = j j j l ik u kj = l ik u kj + l ij u jj l ij = a ij l ik u kj k= k= a pro pevně daný řádek i a j = i +, n je a ij = k= k= k= k= i i i l ik u kj = l ik u kj +l ii u ij u ij = (a ij l ik u kj )/l ii
68 / 94 - a LU LU LU faktorizaci lze provést, pokud jsou diagonální prvky matice L nenulové tato matice ale z jednoznačnosti LU u musí být stejná, jako matice L z a ta má na diagonále pivoty z, tj předpoklady pro oba algoritmy jsou stejné prvky LU u se u této metody napočítají v jednom kroku a neprochází postupným přepočítáváním jako u to napomáhá lepší přesnosti ale umožňuje pivoting jakmile napočítáme prvek l ij nebo u ij nepotřebujeme už znát a ij lze tudíž napočítat tak, že postupně přepisujeme matici A a nepotřebujeme pamět navíc
69 / 94 - a LU LU ze vztahů a LU faktorizaci j l ij = a ij l ik u kj pro j i k= i u ij = (a ij l ik u kj )/l ii pro i < j k= je vidět, že prvky u ij a l ij závisí spojitě na a ij Theorem 2 Prvky matic L a U z LU u jsou spojitou funkcí prvků matice A
70 / 94 - a LU LU LU faktorizaci f or ( i n t step = 0; step < n ; step++ ) 2 { 3 const i n t j = step ; 4 / 5 Napocitej j ty sloupec matice L ( pod diagonalou vcetne ) 6 / 7 f o r ( i n t i = step ; i < n ; i ++ ) 8 { 9 double aux ( 00 ) ; 0 f o r ( i n t k = 0; k < j ; k++ ) aux += A [ i ] [ k ] A [ k ] [, j ] ; 2 A [ i ] [ j ] = aux ; 3 } 4 5 / 6 Napocitej i ty radek matice U ( za diagonalou ) 7 / 8 f o r ( i n t j = step + ; j < n ; j ++ ) 9 { 20 const i n t i = step ; 2 double aux ( 00 ) ; 22 f o r ( i n t k = 0; k < i ; k++ ) 23 aux += A [ i ] [ k ] A [ k ] [ j ] ; 24 A [ i ] [ j ] = aux ; 25 A [ i ] [ j ] /= A [ i ] [ i ] ; 26 } 27 }
LU faktorizaci - a LU LU Example 3 Napočítejte LU matice A = pomocí Croutovy metody 2 3 2 3 4 2 0 7 / 94
72 / 94 - a LU LU Příklad LU pomocí je implementován v programech lu-solver a lu-test --input-file maticemtx soubor ve formátu mtx se vstupní maticí pro lu-solver pravá strana se napočítá tak, aby řešením byl vektor ze samých jedniček --method gem/crout volba metody --verbose n nastavuje úroveň vypisovaných informací v průběhu výpočtu
73 / 94 Příklad - a LU LU program lu-test porovnává přesnost LU u tak, že nakonec vynásobí matice L a U a napočítá normu rozdílu od matice A bin / lu t e s t input f i l e data / matrix mtx verbose 3 method gem 2 bin / lu t e s t input f i l e data / matrix mtx verbose 3 method crout 3 bin / lu t e s t input f i l e data / matrix 2mtx verbose 3 method gem 4 bin / lu t e s t input f i l e data / matrix 2mtx verbose 3 method crout program lu-solver nejprve vypočítá LU a pomocí něj následně řeší soustavu se zadanou maticí slouží jako názorná ukázka toho, jak dlouho trvá výpočet LU u, což přesně odpovídá délce běhu, oproti využití již napočítaného LU u to je ovšem poznat až na větších maticích bin / lu solver input f i l e data / sherman 5mtx method gem
74 / 94 - a LU LU LU pro symetrické matice - Theorem 4 Je-li matice A hermitovská a pozitivně definitní, pak existuje její hermitovský symetrický, tj A = S S, kde matice S je horní trojúhelníková Tomuto u se říká (dekompozice)
75 / 94 - a LU LU LU pro symetrické matice - dekompozice pro jednoduchost se omezíme na symetrické matice, následující platí s malými obměnami i pro hermitovské matice je-li matice A symetrická, lze v počítači uložit jen její jednu polovinu a diagonálu předchozí věta říká, že pro výpočet jejího LU nebudeme potřebovat více prostoru v paměti při použití pro LU symetrické matice stačí upravovat jen horní polovinu a na diagonále ukládat odmocniny pivotů
76 / 94 - a LU LU LU pro symetrické matice - dekompozice je dán vztahy j l ii = aii l ik l ik, pro i =,, n a j k= l ij = (a ij l ik l jk )/l ii k= pro j < i n
- a LU LU LU pro symetrické matice - dekompozice Example 5 Spočítejte matice Řešení: A = L = 25 5 5 5 8 0 5 0 5 0 0 3 3 0 3 77 / 94
78 / 94 - a LU LU Modifikace pro tridiagonální systém mějme následující soustavu se silně regulární maticí a b x c 2 a 2 b 2 x 2 c 3 a 3 b 3 x 3 = c n a n b n c n a n x n x n matici tohoto tvaru říkáme tridiagonální soustavy tohoto tvaru lze řešit velmi efektivně d d 2 d 3 d n d n
79 / 94 - a LU LU Modifikace pro tridiagonální systém přímý chod by eliminoval prvky pod diagonálou a změnil pravou stranu: µ µ 2 µ 3 µ n x x 2 x 3 x n x n = ρ ρ 2 ρ 3 ρ n ρ n chceme tedy najít vztahy pro výpočet koeficientů µ i pro i n ˆ a ρ i pro i ˆn
80 / 94 - a LU LU z první rovnice snadno vidíme, že soustava přejde na tvar µ c 2 a 2 b 2 c 3 a 3 b 3 Modifikace pro tridiagonální systém µ = b a, ρ = d a c n a n b n c n a n x x 2 x 3 x n x n = nyní vidíme, že první řádek využijeme jen k eliminaci jednoho nenulového prvku před diagonálou na druhém řádku, to je výrazně méně práce než u obecné odečteme c 2 násobek prvního řádku od druhého ρ d 2 d 3 d n d n
8 / 94 - a LU LU dostáváme µ a 2 c 2 µ b 2 c 3 a 3 b 3 c n a n b n c n a n následně podělíme druhý řádek pivotem dostáváme µ b 2 a 2 c 2 µ a 2 c 2 µ c 3 a 3 b 3 c n a n b n c n a n Modifikace pro tridiagonální systém x x 2 x 3 x n x n x x 2 x 3 x n x n = = ρ d 2 c 2 ρ d 3 ρ d 2 c 2ρ a 2 c 2 µ d 3 d n d n d n d n a tedy µ 2 = b 2 a 2 c 2µ, ρ 2 = d 2 c 2 ρ a 2 c 2µ
82 / 94 - a LU LU Modifikace pro tridiagonální systém v k-tém kroku máme na začátku soustavu tvaru µ x ρ µ k x k ρ k c k a k b k x k = d k c n a n b n x n d n c n a n x n d n odečteme c k násobek k -tého řádku od k-tého µ x µ k x k a k c k µ k b k x k c k+ a k+ b k+ x k+ = c n a n b n x n c n a n x n nyní podělíme k-tý řádek pivotem a k c k µ k a dostáváme ρ ρ k d k c k ρ k d k+ d n d n b k µ k =, a k c k µ k ρ k = d k c k ρ k a k c k µ k
83 / 94 - a LU LU µ n Modifikace pro tridiagonální systém z tvaru matice soustavy na konci přímého chodu, tj µ x ρ µ 2 x 2 ρ 2 µ 3 x 3 ρ 3 = x n x n snadno odvodíme vztahy pro zpětný chod x n = ρ n x n = ρ n µ n x n ρ n ρ n x k = ρ k µ k x k+ x = ρ µ x 2
84 / 94 - a LU LU Modifikace pro tridiagonální systém Metoda faktorizace pro tridiagonální soustavy µ = b a, ρ = d a pro k = 2, n napočítáme µ k = b k a k c k µ k, a ρ n = dn cnρ n a n c nµ n položíme x n = ρ n pro k = n,, napočítáme x k = ρ k µ k x k+ ρ k = d k c k ρ k a k c k µ k,
85 / 94 - a LU LU Kód Thomasova algoritmu: Modifikace pro tridiagonální systém / 2 E l i m i n u j prvky pod diagonalou 3 / 4 A [ 0 ] [ ] /= A [ ( 0 ] [ 0 ] ; 5 b [ 0 ] /= A [ 0 ] [ 0 ] ; 6 A [ 0 ] [ 0 ] = 0 ; 7 f o r ( i n t k = ; k < n ; k++ ) 8 { 9 b [ k ] = ( b [ k ] A [ k ] [ k ] b [ k ] ) / 0 ( A [ k ] [ k ] A [ k ] [ k ] A [ ( k ] [ k ] ) ; i f ( k < n ) 2 { 3 A [ k ] [ k+ ] = A [ k ] [ k+ ] / 4 ( A [ ( k ] [ k ] A [ k ] [ k ] A [ k ] [ k ] ) ) ; 5 A [ k ] [ k ] = 0 ; 6 } 7 } 8 9 / 20 Zpetna s u b s t i t u c e 2 / 22 f o r ( i n t k = n 2; k >= 0; k ) 23 b [ k ] = b [ k ] A [ k ] [ k+ ] b [ k + ] ;
86 / 94 - a LU LU Modifikace pro tridiagonální systém je implementován v programu thomas-solver --size n velikost matice soustavy její tvar je A = 25 25 25 25 pravá strana se napočítá tak, aby řešením byl vektor ze samých jedniček program řeší zadanou soustavu nejprve pomocí u a pak pomocí Thomasova algoritmu pro porovnání efektivity obou řešičů --verbose n nastavuje úroveň vypisovaných informací v průběhu výpočtu
87 / 94 - a LU LU mějme soustavu A x = b se silně regulární maticí A s následující blokovou strukturou A C x d A 2 C 2 x 2 d2 = A r B B 2 B r A r C r x r x r dr dr rozměry bloků mohou být různé, ale požadujeme, aby A i, C i, x i a d i měly stejný počet řádků pro i r ˆ, aby B, B, B r, A r, x r dr měly stejný počet řádků, aby A i a B i měly stejný počet sloupců pro i r ˆ, a aby C, C r a A r měly stejný počet sloupců
88 / 94 - a LU LU provedeme blokovou Gaussovu eliminaci, tj i-tý řádek vynásobíme maticí A i pro i r ˆ I A C x I A 2 C 2 x 2 I A r C = r x r B B 2 B r A r x r od posledního řádku postupně odečteme B i násobek i-tého řádku I I A C A d A 2 d 2 A r d r dr A 2 C 2 I A r C r A r B A C B 2 A 2 C 2 B r A r C r A d A 2 d 2 A r d r dr B A d B 2 A 2 d 2 B r A r d r x x 2 x r x r =
89 / 94 - a LU LU Definition 6 Matice S = A r B A C B 2 A 2 C 2 B r A r C r se nazývá matici jsem převedli na blokově horní trojúhelníkovou zavedeme značení s = d r B A d B 2 A 2 d 2 B r A r d r pak má soustava tvar I A C I A 2 C 2 I A r C r S x x 2 x r x r snadno vidíme, že řešení lze získat jako = x r = S s x r = A r d r A r C r x r x = A d A C x r A d A 2 d 2 A r d r s
90 / 94 - a LU LU Výpočet probíhá takto: nejprve napočítáme inverze A i pro i r ˆ, v případě paralelního výpočtu to lze provést současně napočítá se S vyřeší se soustava S x r = s napočítají se zbylé složky řešení x r,, x, to lze také provést paralelně
9 / 94 - a LU LU na Schurově doplňku jsou postaveny některé metody pro paralelní řešení lineárních soustav, to je dáno blokovým tvarem matice pro soustavy pocházející z řešení parciálních diferenciálních rovnic je to metoda zvaná domain decomposition teoreticky můžeme uvažovat, že bloky mají velikost, a jde zase jen o speciální tvar matice podobně, jako u tridiagonální matice takové matice se ale neobjevují často na rozdíl od tridiagonálních matic má ale i jiný význam než jen pro paralelizaci
92 / 94 - a LU LU pro r = 2 nemusí být původní soustava ani řídká dostáváme ( A C B A 2 ) ( x x 2 ) ( d d2 pokud je A např tridiagonální nebo symetrická nebo pozitivně definitní můžeme k výpočtu její inverze využít efektivnější metody, které už známe tento postup se velice často používá pro soustavy, které jsou indefinitní, tj mají kladná i záporná vlastní čísla běžné metody zde nejsou příliš efektivní )
93 / 94 - a LU LU také jsme si na Schurově doplňku ukázali, jak provádět na blokové matice podobný postup lze použít i pro blokově tridiagonální matice nebo jiné blokově výhodně uspořádání matice
94 / 94 - a LU LU odvození včetně algoritmu pro jaké matice lze použít vysvětlit modifikovanou k čemu slouží a jak lze napočítat LU k čemu slouží a jak lze napočítat řešení soustav s tridiagonální maticí co je to