PA081 Programování numerických výpočtů Mgr. Radka Svobodová Vařeková
Cíl přednášky Převést matematickou formulaci numerického výpočtu na program, který tento výpočet provede s dostatečnou přesností a co nejefektivněji.
Implementace numerických výpočtů Převést problém do formy, pro níž: Existuje standardní algoritmus (např. f(x) = 0) Tento algoritmus je numericky stabilní (pro všechny vstupy poskytuje výsledky, vyhovující zadání problému). Daný algoritmus lze implementovat tak, že vzniklý program bude: Efektivní Srozumitelný Rozšiřitelný
Implementace numerických výpočtů – numerická stabilita I matematicky korektní algoritmus může po implementaci poskytovat nepřesné případně chybné výsledky. Důvod: Konečná reprezentace reálných čísel v počítači.
Implementace numerických výpočtů – efektivita Každá úloha lze řešit více metodami. Dané metody se liší: Časovou složitostí Prostorovou složitostí Vhodností pro určitou platformu Je nutno vzít v úvahu všechny tyto faktory.
Implementace numerických výpočtů – programovací jazyky FORTRAN C, C++ Java Python …
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
Sylabus - nelineární úlohy Nelineární rovnice tvaru: f(x) = g(x) Konkrétní příklady: kvadratické rovnice (1 – cos x)/x pro malé x sin x = ax + b …
Sylabus - nelineární úlohy II Numerické integrace: Obecně o metodách: Lichoběžníkové pravidlo Rombergova integrac Konkrétní příklady: Odstranění singularity u ....
Sylabus - lineární úlohy Soustavy lineárních rovnic tvaru: Ax = b Konkrétní metody: x = A-1 . b Gaussova eliminační metoda a její varianty
Sylabus - lineární úlohy II Metoda nejmenších čtverců pro lineární úlohy: Máme množinu bodů: (parametry experimentu, naměřená hodnota) Těmito body proložíme lineární trend (přímku, která bude co nejblíže ke všem naměřeným bodům)
Vstupní požadavky Informatika - pojmy z oblasti: Návrhy algoritmů I Matematika - základní znalosti z oblastí: Lineární algebra Matematická analýza
Požadavky ke zkoušce a hodnocení znalosti v rozsahu přednášek :-) zkouška bude písemná (příklady + teorie) Hodnocení: A 90 % B 80 % C 70 % D 60 % E 50 % F < 50 %
Požadavky k zápočtu Požadavky: Hodnocení: Poznámka: Vypracovat zápočtový projekt (zadání projektu získá student po domluvě s učitelem). Hodnocení: z projekt splňuje požadavky, domluvené při zadávání n jinak Poznámka: Předmět PA081 nelze ukončit kolokviem.
Materiály ke studiu Slidy: http://ncbr.chemi.muni.cz/~n19n/vyuka/nv u Marečka
Literatura Acton, F. S. REAL Computing made real : preventing errors in scientific and engineering calculations. Princeton : Princeton University Press, 1996. Higham, N. J. Accuracy and stability of numerical algorithms. Philadelphia : Society for Industrial and Applied Mathematics. Stroustrup, B. The C++ programming language. 3rd ed. Reading : Addison-Wesley, 1997.
Konzultační hodiny Kdy: Dle domluvy Kde: Kancelář C503.
Domácí úkoly Budu zadávat na některých přednáškách. Jejich řešení budu prezentovat na následující přednášce a zveřejním na Internetu. Jsou dobrovolné :-). Jsou hodnoceny bonus body. Když si je vyřešíte, pochopíte problematiku lépe.
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic Rovnice tvaru: x2 + 2bx +c = 0
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic Rovnice tvaru: x2 + 2bx +c = 0 Školní algoritmus: (pokud D >= 0) Problém školního algoritmu: b >> c Pak totiž: Rozdíl 2 skoro stejně velkých čísel Ztráta přesnosti
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic II Příklad výpočtu pomocí školního algoritmu: b = 1000, c = 1
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic II Příklad výpočtu pomocí školního algoritmu: b = 1000, c = 1 b2 – c = 999 999 Po zaokrouhlení na 10 cifer (float v C): x+ = -1000 + 999,9995 = -5 . 10-4 x- = -1000 - 999,9995 = -1999,9995000
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic III Porovnání přesného výpočtu a výpočtu pomocí školního algoritmu: Výsledky školního algoritmu (10 cifer): x+ = -5 . 10-4 x- = -1999,9995000 Přesné výsledky: x+ = -5,000001250000625 . 10-4 x- = -1999,999499999874
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic IV Numericky stabilní algoritmus: x- vypočítáme stejně jako předtím: Vztah pro x+ odvodíme z rovnice: x2 + 2bx + c = (x – x-).(x – x+) Platí tedy: c = x-.x+ => x+ = c/x-
Nelineární úlohy – demonstrační příklady řešení kvadratických rovnic V Porovnání přesného výpočtu, výpočtu pomocí numericky stabilního algoritmu a výpočtu pomocí školního algoritmu: Výsledky numericky stabilního algoritmu (10 cifer): x- = -1999,9995000 x+ = 1 / -1999,9995000 = 5,000001250 . 10-4 Výsledky školního algoritmu (10 cifer): x+ = -5 . 10-4 Přesné výsledky: x- = -1999,999499999874 x+ = -5,000001250000625 . 10-4
Domácí úkol Vytvořte co možná nejlepší program pro výpočet kořenů kvadratické rovnice. Ošetřete všechny problémové situace, které mohou nastat. Program otestujte na rovnici: x2 + 20000x +1 = 0 Programujte ve svém oblíbeném programovacím jazyce. Odevzdejte program a hodnoty kořenů testovací rovnice Datum odevzdání: do 7.3.2005 Hodnocení: 3%
Nelineární úlohy – demonstrační příklady (1 - cos x)/x2 Rovnice tvaru: (1 - cos x)/x2 Řešení dle definice - problém pro malá x: x = 1,2 . 10-5 (radiány) cos x (zaokrouhleno na 10 cifer): cos (1,2 . 10-5) = 0,9999999999 1-cos x (zaokrouhleno na 10 cifer): 1 - 0,9999999999 = 1.10-10 x2 : (1,2 . 10-5)2 = 1,44.10-10 (1 - cos x)/x2 (zaokrouhleno na 10 cifer): 1.10-10 / 1,44.10-10 = 0,6944444444
Nelineární úlohy – demonstrační příklady (1 - cos x)/x2 II Rovnice tvaru: (1 - cos x)/x2 Porovnání přesného řešení a řešení dle definice: Přesné řešení: cos (1,2 . 10-5) = 0,999999999928000000000864 1-cos (1,2 . 10-5) = 7,19999999991360000... .10-11 (1,2 . 10-5)2 = 1,44.10-10 (1 - cos x)/x2 = 0,49999999999400... Řešení dle definice: (1 - cos x)/x2 = 0,6944444444
Nelineární úlohy – demonstrační příklady (1 - cos x)/x2 III Rovnice tvaru: (1 - cos x)/x2 Numericky stabilní algoritmus: Nahradíme cos x pomocí Taylorova rozvoje: cos x = 1 – x2/2! + x4/4! – x6/6! + … Výpočet (zaokrouhleno na 10 cifer):
Nelineární úlohy – demonstrační příklady (1 - cos x)/x2 IV Porovnání přesného výpočtu, výpočtu pomocí numericky stabilního algoritmu a výpočtu dle definice: Výsledky numericky stabilního algoritmu (10 cifer): (1 - cos x)/x2 = 0,5 Výsledky výpočtu dle definice (10 cifer): (1 - cos x)/x2 = 0,6944444444 Přesné výsledky: (1 - cos x)/x2 = 0,49999999999400...
Domácí úkol Navrhněte jinou (numericky stabilní) metodu pro výpočet hodnoty výrazu: (1 - cos x)/x2 Navrženou metodu otestujte pro x = 1,2 . 10-5 Datum odevzdání: do 7.3.2005 Hodnocení: 3% (za první metodu) + 1,5% za další originální metodu (nejvýše 6% na osobu)