Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

PA081 Programování numerických výpočtů Přednáška 2.

Podobné prezentace


Prezentace na téma: "PA081 Programování numerických výpočtů Přednáška 2."— Transkript prezentace:

1 PA081 Programování numerických výpočtů Přednáška 2

2 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

3 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: x 2 + 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%

4 Domácí úkol 1)Použít vhodný (dostatečný počet desetinných míst) datový typ – např. double v C 2)Vyloučit vstupní hodnoty, pro něž program nefunguje (a = 0, c = 0) 3)Ošetřit záporný diskriminant 4)Použít numericky stabilní algoritmus 5)Nevypisovat na více míst, než je přesnost datového typu

5 Domácí úkol Navrhněte jinou (numericky stabilní) metodu pro výpočet hodnoty výrazu: (1 - cos x)/x 2 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)

6 Mocninné řady - rovnice (1)

7 Mocninné řady - rovnice (2)

8 Nelineární úlohy sin x / x(1) Výraz tvaru: sin x / x Pro malé x platí: Nelze ale x stále zmenšovat – program ohlásí dělení nulou. => Musíme výraz převést do vhodnějšího tvaru

9 Nelineární úlohy sin x / x(2) Řešení: Využití mocninných řad Problém s využitím mocninných řad: Nepřesnost pro velká x

10 Nelineární úlohy sin x / x(3) Problém s využitím mocninných řad: Nepřesnost pro velká x x = 0,99

11 Nelineární úlohy sin x / x(4) Problém s využitím mocninných řad: Nepřesnost pro velká x x = 0,99 Přesný výpočet: sin x / x = 0,84447068545507122908006… Výpočet pomocí mocninné řady:

12 Nelineární úlohy sin x / x (5) ? Jak to tedy řešit ?

13 Nelineární úlohy sin x / x(6) IF |x| > c THEN sin(x)/x ELSE Jak zjistit c?

14 Nelineární úlohy sin x / x(7) Jak zjistit c? Vím, jakou přesnost požaduji Zajistím, aby měl největší zanedbaný člen mocninné řady (x 6 /7!) menší hodnotu než je daná přesnost.

15 Nelineární úlohy sin x / x(8) Jak zjistit c? Vím, jakou přesnost požaduji Zajistím, aby měl největší zanedbaný člen mocninné řady (x 6 /7!) menší hodnotu než je daná přesnost. Příklad: Požadovaná přesnost: c 6 /7! = 10 -7 c  0,2821

16 Nelineární úlohy (1) Výraz tvaru: Pro malé x se jedná o odečítání 2 takřka stejně velkých čísel => Musíme výraz převést do vhodnějšího tvaru Nějaké návrhy?

17 Nelineární úlohy (2) a) Systematické řešení:

18 Nelineární úlohy (3) b) „Důmyslné“ řešení:

19 Nelineární úlohy (1) Výraz tvaru: Pro velké x se jedná o odečítání 2 takřka stejně velkých čísel => Musíme výraz převést do vhodnějšího tvaru Nějaké návrhy?

20 Nelineární úlohy (2) Výraz tvaru: Úpravy dle definice:

21 Nelineární úlohy (1) Výraz tvaru: Pro velké x se jedná o odečítání 2 takřka stejně velkých čísel => Musíme výraz převést do vhodnějšího tvaru Nějaké návrhy?

22 Nelineární úlohy (2) Výraz tvaru: Úpravy dle definice:

23 Nelineární úlohy (3) Výraz tvaru: Úpravy dle definice:

24 Domácí úkol Navrhněte metodu, jak určit přesnou hodnotu výrazu: Pro x   /2 Otestujte pro x = 1.5708. Pracujte s co nejpřesnější hodnotou . Odevzdejte popis metody a hodnotu výrazu pro testovací hodnou x. Datum odevzdání: do 20.3.2005 Hodnocení: 3%

25 Nelineární úlohy (1) Výraz tvaru: Pro b  1 pracujeme s velmi malými hodnotami x a dochází ke ztrátě přesnosti. ‚ x2x2 x1x1 b1b1 b2b2 => Velmi malá změna b způsobí velkou změnu x.

26 Nelineární úlohy (2) Velmi malá změna b (pro b  1) způsobí velkou změnu x. Příklad: b 1 = 0,987654 b 2 = 0,987655 x 1 = acos(0,987654) = 0,15729901412068000000000 x 2 = acos(0,987655) = 0,15729261767178100000000 Relativní chyba = (x 2 – x 1 )/(b 2 - b 1 ) = 6,38 Čím blíž bude b k 1, tím větší bude relativní chyba

27 Nelineární úlohy (3) Problém je špatně podmíněný = malý rozdíl ve vstupních datech způsobuje velký rozdíl ve výsledku. Řešení: Musíme si uchovat malá čísla.  b nahradíme 1 – e a cos x nahradíme pomocí mocninné řady. cos x = b

28 Nelineární úlohy (4) Problém převedeme na rekursivní tvar a iterativně hledáme řešení: t = x 2

29 Nelineární úlohy (5) Rekursivní tvar: Příklad: b = 0,98765 t 0 = 0 t 1 = ?

30 Věta o pevném bodě (1) Řešení rovnice x = f(x) pomocí rekursivní rovnice x i+1 = f(x i ) Jak tento postup funguje? Vysvětlím na tabuli.

31 Věta o pevném bodě (2) Řešení rovnice x = f(x) pomocí rekursivní rovnice x i+1 = f(x i ) Kdy lze tento postup použít (jaké jsou podmínky konvergence)? Věta (o pevném bodě): Nechť f: K  K je spojitá funkce (kde K je interval v R), pro kterou existuje q < 1 tak, že pro všechna x, y  K platí: | f(x) – f(y) |  q.| x – y | (tedy f je kontrakce (dx je větší než df(x) )) Pak existuje x*  K tak, že pro libovolné x 0  K je x* limitou posloupnosti: x i+1 = f(x i )i = 0, 1, 2, …

32 Nelineární úlohy (1) Výraz tvaru: Pro malé x při počítání a sčítáme řádově velmi odlišná čísla => ztrácíme přesnost, s jakou bylo původně známo číslo x. => Musíme výraz převést do vhodnějšího tvaru Nějaké návrhy?

33 Nelineární úlohy (2) Potřebujeme dostat čitatel i jmenovatel do tvaru: 1  e  dělíme číslem a získáme výraz: použijeme


Stáhnout ppt "PA081 Programování numerických výpočtů Přednáška 2."

Podobné prezentace


Reklamy Google