Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy Řešení nelineárních rovnic Numerická integrace Lineární úlohy Řešení soustav lineárních rovnic Metoda nejmenších čtverců pro lineární úlohy Sumace obecné a s korekcí Numerické výpočty v C a C++ Optimalizace výrazů, optimalizace při překladu
Řešení soustavy lineárních rovnic Popis problému Iterační metody Maticové normy + Podmínky ukončení Konkrétní metody Přímé metody Gaussova eliminační metoda Metoda LU rozkladu
Popis problému Řešíme soustavu rovnic: Ax = b Kde:
Iterační metody Řešíme soustavu rovnic: Ax = b Kde: Hledáme odhad y x. => Hledáme tedy takové y, pro které existuje malé A a b: (A + A)y = b + b Velikost matice A lze určit pomocí maticové normy.
Iterační metody - Maticové normy Euklidovská norma pro x Rn: 2 možná zobecnění pro A Cmn: Frobeniova norma: Spektrární norma:
Iterační metody - Maticové normy II Spektrární norma: kde: AT je transponovaná matice A (B) je maximální vlastní hodnota matice B
Iterační metody - Maticové normy III Další normy: Maximální součet sloupce: Maximální součet řádku:
Iterační metody - Maticové normy IV Obecné podmínky pro maticové normy:
Iterační metody – Podmínky ukončení Řešíme soustavu rovnic: Ax = b Hledáme odhad y x. Hledáme tedy takové y, pro které existuje malé A a b: (A + A)y = b + b Lze použít například následující aproximaci: Hledáme hodnotu:
Iterační metody – Podmínky ukončení II Hledáme hodnotu: Využijeme větu: Aplikace: Při iterativním výpočtu vektoru x hodnotíme konvergenci metody pomocí výše uvedené hodnoty. Poznámka: Existuje více metod, jak využít maticové normy ke studiu konvergence.
Iterační metody – seznam metod Lze použít většina optimalizačních metod (musí být adaptovány pro práci s maticemi), konkrétně: Nederivační metody Prostá iterace Metody první derivace Spádové metody Metoda konjugovaných gradientů Metody druhé derivace Newtonovské a quazi-Newtonovské metody Nebudeme probírat všechny – jen přehled a zorientování se
Iterační metody – prostá iterace Řešíme soustavu rovnic: Ax = b Převedeme soustavu na tvar: X(k+1) = U . X(k) + V, k = 0, 1, … . kde: U čtvercová matice stupně n, V je vektor dimenze n (přesná definice U a V záleží na implementaci) Zvolíme X(0) Iterujeme až do splnění podmínek ukončení
Iterační metody – prostá iterace Řešíme soustavu rovnic: Ax = b Konkrétní metody prosté iterace: Jacobiova metoda: Gaussova-Saidlova metoda: Relaxační metoda SOR:
Jacobiova metoda - příklad
Iterační metody - metoda konjugovaných gradientů Obecně pro metodu konjugovaných gradientů platí: x(k+1) = x(k) + a(k).s(k) s(k+1) = -g(k+1) + b(k).s(k) Pro práci se soustavou lineárních rovnic platí: g(k) = b – A.x(k)
Iterační metody - metoda konjugovaných gradientů - příklad Zadání: Najděte x* = (x1, x2), aby platilo: A.x* = b, přičemž:
Iterační metody - metoda konjugovaných gradientů – příklad II Iniciace (k = 0): g(0) = b; s(0) = -g (0) První krok (k = 1): x(1) = g(1) = s(1) =
Iterační metody - metoda konjugovaných gradientů – příklad II Iniciace (k = 0): g(0) = b; s(0) = -g (0) První krok (k = 1): x(1) = x(0) + a(0).s(0) = (0.5, 0, 0.5) g(1) = b – A.x(1) = (0,1,0) s(1) = -g(1) + b(0).s(0) = (-0.5, -1, -0,5)
Iterační metody - metoda konjugovaných gradientů – příklad III Druhý krok (k = 2): x(2) = x(1) + a(1).s(1) = (1, 1, 1) g(2) = b – A.x(2) = (0,0,0) s(2) = -g(2) + b(1).s(1) = (0, 0, 0)
Gaussova eliminační metoda Řešíme soustavu rovnic: Ax = b A musí být regulární. a) Gaussova eliminace: Převedení matice Ax = b na tvar A(n) x = b(n), kde A(n) je horní trojúhelníková matice Složitost (n3) b) Zpětný chod: Dopočítání x z rovnice A(n) x = b(n) Složitost (n2)
Gaussova eliminace Řešíme soustavu rovnic: Ax = b A musí být regulární. Iniciace: A(1) := A, b(1) := b Ukončení: A(n) x = b(n), A(n) je horní trojúhelníková matice
Gaussova eliminace 2 k-tý krok metody: Na začátku k-tého kroku (po k-1 iteracích) máme: , kde: A11(k) je horní trojúhelníková matice, V tomto kroku provádíme následující: Vynulujeme prvky ležící v k-tém sloupci pod diagonálou.
Gaussova eliminace 3 V k-tém kroku provádíme následující: Vynulujeme prvky ležící v k-tém sloupci pod diagonálou: kde: Tímto krokem tedy získáme: A(k+1) a b(k+1) akk
Gaussova eliminace 4 Pomocí Gaussovy eliminace tedy získáme soustavu: A(n) x = b(n), kde A(n) je horní trojúhelníková matice a lze ji tedy řešit zpětnou substitucí Složitost metody: (n3) Srovnání s výpočtem pomocí inverzní matice (!x = b.A-1): Gaussova eliminace je numericky stabilnější Gaussova eliminace je numericky rychlejší
Gaussova eliminace 6 Potenciální problémy GE: Při výpočtu může být akk(k) nula nebo téměř 0 Při odečítání může dojít ke ztrátě platných cifer, pokud je mij velké. Příklad: =>
Gaussova eliminace 7 Potenciální problémy GE: Při odečítání může dojít ke ztrátě platných cifer, pokud je mij velké. Příklad: => Pro dostatečně malé se ale 1- 1/ zaokrouhlí na -1/. Dostaneme tedy výsledek, který přísluší matici:
Gaussova eliminace - parciální pivoting Řešením problémů GE je využití parciálního pivotingu: Na začátku k-tého kroku se prohodí k-tý řádek za r-tý, kde r je určeno vztahem: tzn. prohodíme k-tý řádek s řádkem, který má v k-tém sloupci největší číslo. To zaručuje, že činitelé mik budou v absolutní hodnotě menší než 1:
Gaussova eliminace - parciální pivoting 2 Využití parciálního pivotingu řeší i problém ztráty platných cifer při : Viz příklad: V prvním kroku se 1. řádek zamění s druhým: Výsledek:
Gaussova eliminace - úplný parciální Výběr maximálního prvku neeliminované části matice. Přehození řádků i sloupců tak, aby se maximální prvek stal pivotem Z numerického hlediska nepřináší žádné výhody vzhledem k metodě částečného pivotingu Proto větčinou dáváme přednost parciálnímu pivotingu
Gaussova eliminace - příklad Řešte Gaussovou eliminační metodou a Gaussovou eliminační meodou s parciálním pivotingem
Metoda LU rozkladu (1) Řešíme soustavu rovnic: Ax = b (A musí být regulární) Matici A lze vyjádřit: A = LU, kde: L je dolní trojúhelníková matice (s 1 na diagonále) U je horní trojúhelníková matice Ax = b => LU x = b Nejdříve vypočítáme vektor y z rovnice: Ly = b Potom vektor x z rovnice: Ux = y
Metoda LU rozkladu (2) Ax = b => LU x = b Nejdříve vypočítáme vektor y z rovnice: Ly = b Potom vektor x z rovnice: Ux = y Význam: Řešení obou soustav (Ly = b a Ux = y) je analogické jako část „zpětný chod“ v rámci Gaussovy eliminační metody. Má složitost (n2) a je numericky stabilní. Jak získat matice U a L: Rozkladem matice A po řádcích nebo po sloupcích
Metoda LU rozkladu - příklad 1 řádek a 1 sloupec: 1.u11 = 2 1 řádek a 2 sloupec: 1.u12 = 5 1 řádek a 3 sloupec: 1.u13 = 6 2 řádek a 1 sloupec: l21.u11 = 4 => u21 = 2 2 řádek a 2 sloupec: l21.u12 + 1.u22 = 13 => u22 = 3 2 řádek a 3 sloupec: l21.u13 + 1.u23 = 19 => u23 = 7 3 řádek a 1 sloupec: l31.u11 = 6 => l31 = 3 3 řádek a 2 sloupec: l31.u12 + l32.u22 = 27 => l32 = 4 3 řádek a 3 sloupec: l31.u13 + l32.u23 + u33 = 50 => u33 = 4
Metoda LU rozkladu – příklad (2) Ly = b => Ux = y =>