300 likes | 578 Views
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í
E N D
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
Písemka - termíny Poslední přednáška bude za týden (9.5.) Do 16.5. dodám na Internet a k Marečkovi všechny materiály + vzorovou písemku + opravím zbylé DCV Vypsala jsem tyto termíny: 24.5. v 16:30 7.6. v 16:30 14.6. v 16:30 Písemka bude trvat 2 hodiny, je povolena kalkulačka
Minimalizace součtu čtverců- shrnutí Optimalizuje teoretický model tak, aby co nejvíce odpovídal naměřeným datům. => Minimalizuje odchylku modelu od naměřených hodnot. Využití: Všude, kde máme co do činění s analýzou nějakého přírodního nebo technického systému.
Minimalizace součtu čtverců- shrnutí II Máme naměřená data: (ai, bi), i = 1, ..., m kde: aiÎ Rk bod měření bi hodnota, naměřená v bodě ai Chceme vytvořit matematický model M: Rk+n -> R, který je závislý na n volných parametrech x1, x2, ..., xn a pro který požadujeme, aby: M(ai, x) »bii = 1, ..., m => Musíme z naměřených hodnot dopočítat hodnoty parametrů JAK?: Pomocí minimalizace součtu čtverců
Lineární úloha nejmenších čtverců- shrnutí Model M(ai, x) je lineární vzhledem k hledaným parametrům a lze tedy zapsat takto: M(ai, x) = f1(ai).x1 + ... + fn(ai).xn bi kde: i = 1, ..., mm je počet naměřených bodů (m ≥ n) f1, ..., fnjsou lineární funkce Pro odchylku modelu od reálného výsledku měření platí: => ri(x) = M(ai, x) - bi = f1(ai).x1 + ... + fn(ai).xn- bi Hledáme takové x, aby suma čtverců odchylek ri(xi) byla minimální:
Lineární úloha nejmenších čtverců- shrnutí II • Metody řešení problému: • Využití minimalizace • Využití matice lineárních kombinací • Řešení rovnice ATAx = ATb • Vypočítat x přímo z této rovnice. • Využít Choleského faktorizaci. • Využít QR faktorizaci • Využít SVD (singular value decomposition)
Řešení rovnice ATAx = ATb- využití Choleského faktorizace - obecně Pokud je matice M pozitivně definitní, pak pro ni může být vytvořena matice R tak, aby platilo: M = RT.R přičemž matice R je horní trojúhelníková matice. Proces vytvoření matice R se nazývá Choleského faktorizace matice M.
Řešení rovnice ATAx = ATb- využití Choleského faktorizace – příklad 1 Proveďte Choleského faktorizaci matice M: Řešení: => m11 = r112 => r11 = 5 => m21 = r11.r21=> r21 = m21/r11 = 15/5 = 3 …
Řešení rovnice ATAx = ATb- využití Choleského faktorizace – obecně II • Algoritmus: • Vypočítej matice C a c: • C = AT.A; c = AT.b • Poznámka: Matice A obsahuje 1 sloupec navíc (= první sloupec, tvořený čísly 1). • Najdi Cholského faktorizaci matice C: • C = RT.R • Získej x řešením rovnic: • RT.y = c (odtud získej y) • Rx = y (odtud získej x)
Řešení rovnice ATAx = ATb- využití Choleského faktorizace – příklad 2 Měřením jsme získali 3 body: (2, 0, -1); (2, 1,-2) a (1, -1, 1) (m = 3) Chceme vytvořit model: M(si, (g, h, e)) = g.si1 + h.si2 + e Di Problém lze řešit pomocí rovnice x = (AT.A)-1.ATb a Chol. fakt.:
Řešení rovnice ATAx = ATb- využití Choleského faktorizace – příklad 2 (2) Měřením jsme získali 3 body: (2, 0, -1); (2, 1,-2) a (1, -1, 1) (m = 3) Chceme vytvořit model: M(si, (g, h, e)) = g.si1 + h.si2 + e Di Problém lze řešit pomocí rovnice x = (AT.A)-1.ATb a Chol. fakt.: => h =-1; g = -1; e = 1 => f(si1, si2) = -si1 - si2 + 1
Řešení rovnice ATAx = ATb- využití Choleského faktorizace – příklad 2 (2) Měřením jsme získali 3 body: (2, 0, -1); (2, 1,-2) a (1, -1, 1) (m = 3) Chceme vytvořit model: M(si, (g, h, e)) = g.si1 + h.si2 + e Di Problém lze řešit pomocí rovnice x = (AT.A)-1.ATb a Chol. fakt.:
Řešení rovnice ATAx = ATb- využití Choleského faktorizace – zhodnocení • Výhoda: • Nižší časová složitost než u výpočtu přímo z rovnice (viz d.cv.) • Nevýhody: • Algoritmus není příliš numericky stabilní: • float(ATA) ≠ (ATA) • hodnota může být velká, pokud je velké • x* přesné řešení, odhad • navíc nelze určit, jak přesné je řešení
Domácí úkol Určete (+zdůvodněte) časovou složitost řešení úlohy nejmenších čtverců pro metodu: a) Využití matice lineárních kombinací (to máme už od minule) b) Přímé řešení rovnice ATAx = ATb c) Řešení rovnice ATAx = ATb pomocí Choleského faktorizace Snažte se určit složitost co nejpřesněji (vzhledem k m a n) Do 16.5.2005 Každá část 2%
Řešení rovnice ATAx = ATb- využití QR faktorizace - obecně Pokud má matice M Rm x n, kde m ≥ n, hodnost n, pak pro ni mohou být vytvořeny matice R a Q tak, aby platilo: M = Q.R kde: R Rn x n je horní trojúhelníková matice Q Rm x n je ortogonální matice
Řešení rovnice ATAx = ATb- využití QR faktorizace – obecně 2 • Algoritmus: • Vypočítej matice Q a R: • A = Q.R • Vypočítej d: • d = QT.b • Získej x řešením rovnice: • Rx = d
Řešení rovnice ATAx = ATb- využití QR faktorizace – příklad Měřením jsme získali 3 body: (3, -6, -1); (4, -8,7) a (0, 1, 2) (m = 3) Chceme vytvořit model: M(ti, (e1, e2, e3)) = e1.ti1 + e2.ti2 + e3Vi Problém lze řešit pomocí rovnice x = (AT.A)-1.ATb a QR fakt.:
Řešení rovnice ATAx = ATb- využití QR faktorizace – příklad (2) Měřením jsme získali 3 body: (3, -6, -1); (4, -8,7) a (0, 1, 2) (m = 3) Chceme vytvořit model: M(ti, (e1, e2, e3)) = e1.ti1 + e2.ti2 + e3Vi Problém lze řešit pomocí rovnice x = (AT.A)-1.ATb a QR fakt.:
Řešení rovnice ATAx = ATb- využití QR faktorizace – příklad (2) Měřením jsme získali 3 body: (3, -6, -1); (4, -8,7) a (0, 1, 2) (m = 3) Chceme vytvořit model: M(ti, (e1, e2, e3)) = e1.ti1 + e2.ti2 + e3Vi Problém lze řešit pomocí rovnice x = (AT.A)-1.ATb a QR fakt.:
Řešení rovnice ATAx = ATb- využití QR faktorizace – zhodnocení Výhody: Časová složitost nižší než u výpočtu přímo z rovnice (viz d.cv.) Větší numerická stabilita než u Choleského faktorizace. Nevýhody: Pomalejší než u Choleského faktorizace. Složitější implementace.
Řešení rovnice ATAx = ATb- využití SVD (single value decomposition) - obecně Nechť M Rm x n je matice řádu n, pak existují ortogonální matice U Rm x n a V Rm x n tak, že platí: M = U..VT kde 1≥ 2 ≥ … r > 0. Tento rozklad je určen jednoznačně.
Řešení rovnice ATAx = ATb- využití SVD (single value decomposition) – obecně 2 Pro x potom platí následující: kde:
Řešení rovnice ATAx = ATb- využití SVD (single value decomposition) – zhodnocení Výhody: Časová složitost nižší než u výpočtu přímo z rovnice (viz d.cv.) Větší numerická stabilita než u Choleského faktorizace. Nevýhody: Složitější implementace.
Sumace- obecně • Úkol: • Vypočítat hodnotu výrazu • Postup: • Rekursivní sumace • Párová sumace • Sumace s vkládáním
Sumace- rekursivní sumace • Vstup: • posloupnost čísel x1, …, xn • Algoritmus rekursivní sumace: • suma = 0 • for (i=1; i<=n; i++) • suma = suma + xi
Sumace- párová sumace • Vstup: • posloupnost čísel x1, …, xn • Algoritmus párové sumace: • Krok 1) xi(1) = x2i-1 + x2i • Pokud je n liché, pak • Krok j) xi(j+1) = x2i-1(j) + x2i (j) • Probíhá v krocích. • Je možno realizovat paralelně nebo pomocí vektorů.
Sumace- sumace vkládáním • Vstup: • posloupnost čísel x1, …, xn • Algoritmus párové sumace: • Čísla xi setřídíme: • Opakuj: • (a) t = x1+ x2 • (b) zařaď t do posloupnosti x3, ...xn
Sumace- zobecnění předchozích 3 algoritmů • Vstup: • posloupnost čísel x1, …, xn • Obecný algoritmus: • Nechť S = {x1,…,xn} • WHILE |S| > 1 DO • Odstraň z S vybraná čísla x a y. • Přidej x + y do S. • DONE • Na konci získáme jednoprvkovou množinu S, obsahující číslo, které je sumou posloupnosti x1, …, xn
Sumace- zhodnocení předchozích 3 algoritmů • Chyba kde: • je odhad Sn, získaný uvedeným algoritmem. • je definována takto: • kde: v i-tém běhu cyklu • přičemž u je relativní zaokrouhlovací chyba elementárních operací • => Pravidlo: Provádějte sčítání tak, aby se minimalizovaly • velikosti • => Lépe sčítat čísla vzestupně k jejich velikosti než sestupně.
Sumace- sumace s korekcí • Algoritmus: • s = 0; e = 0 • for (i=1; i<=n; i++){ • tmp = s • y = xi + e (i-tý sčítanec + oprava chyby z minulého cyklu) • s = s + y • e = (tmp – s) + y (odhad chyby ve výrazu s+y) • } Toto se může výrazně lišit od –y (speciálně pokud je s daleko větší než y)