Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.