PA081 Programování numerických výpočtů Přednáška 4
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
Nelineární úlohy (1-sin x) / ( /2-x)(1) Výraz tvaru: (1-sin x) / ( /2-x) pro x /2 Standardní výpočet pro x = 1,5708: (přesnost 10 desetinných míst) /2 =1, /2-x = 0, sin x = 0, (1-sin x) / ( /2-x) = 0,
Nelineární úlohy (1-sin x) / ( /2-x)(2) Výraz tvaru: (1-sin x) / ( /2-x) pro x /2 Přesný výpočet pro x = 1,5708: /2 = 1, /2-x = -0, sin x = 0, (1-sin x) / ( /2-x) = 0,
Nelineární úlohy (1-sin x) / ( /2-x)(3) Výraz tvaru: (1-sin x) / ( /2-x)pro x /2 Převedení úlohy do vhodnějšího tvaru: Substituce t = /2 – x Pro sin x pak platí: sin x = sin ( /2 – t) = -sin (t - /2) = cos (t) Pozn.:sin (x + /2) = cos x; sin (x - /2) = -cos x
Nelineární úlohy (1-sin x) / ( /2-x)(4) Výraz tvaru: (1-sin x) / ( /2-x)pro x /2 Převedení úlohy do vhodnějšího tvaru: x = 1,5708 t = 0,
Nelineární úlohy (1-sin x) / ( /2-x)(5) Porovnání výsledků (x = 1,5708): Standardní výpočet: 0, Přesný výpočet: 0, Pozměnění výrazu: 0,
Iterační metody Praktický příklad 2: (1) Prostá iterace: Nalezení rekurzivní rovnice: Nějaké návrhy?
Prostá iterace: Nalezení rekurzivní rovnice: a)konverguje b)diverguje Iterační metody Praktický příklad 2: (2)
Prostá iterace: Nalezení rekurzivní rovnice: a) konverguje 7 iterací pro přesnost na 6 des. míst Iterační metody Praktický příklad 2: (3)
Newtonova metoda: Úprava rovnice není nutná: Derivace: Výpočet x i+1 : Pozor na správnou volbu x 0 : x 0 = 1 (chyba), x 0 = 2 (OK) Iterační metody Praktický příklad 2: (4)
Newtonova metoda: 7 iterací pro přesnost na 6 des. míst Iterační metody Praktický příklad 2: (5) 2 2, , , , , , ,076421
Iterační metody Praktický příklad 3: sin x = x - h(1) Prostá iterace: Pro h = 0, Pro h = 0,
Iterační metody Praktický příklad 3: sin x = x - h(1) Prostá iterace: Pro h = 0, Nalezení rekurzivní rovnice: a)x = sin x + hkonverguje (x* = 1,145472; 20 iter.) b)x = asin (x – h)nekonverguje Pro h = 0, Nalezení rekurzivní rovnice: a)x = sin x + hnekonverguje b)x = asin (x – h)nekonverguje
Iterační metody Praktický příklad 3: sin x = x - h(2) Newtonova metoda: Úprava rovnice:f(x) = sin x – x + h = 0 Derivace:f’(x) = cos x - 1 Výpočet x i+1 : Pro h = 0,234567: konverguje; x 0 = 0,5; x* = 1,145472; 6 iter. Pro h = 0, : konverguje; x 0 = 0,001; x* = 0, ; 22 iter. VELMI OBTÍŽNÁ VOLBA x 0 ROVNICE PRO x i+1 MÁ NEVHODNÝ TVAR
Iterační metody Praktický příklad 3: sin x = x - h(3) Pro h = 0, Analogický problém pro metodu regula falsi: Má ve jmenovateli: sin a – a – (sin b – b) => velmi malá čísla, navíc jejich rozdíl se blíží 0 Co tedy dělat?:
Iterační metody Praktický příklad 3: sin x = x - h(4) Pro h = 0, Analogický problém pro metodu regula falsi: Má ve jmenovateli: sin a – a – (sin b – b) => velmi malá čísla, navíc jejich rozdíl se blíží 0 Co tedy dělat?: a) Půlení intervalů – zaručené, ale pomalé: konverguje, 22 iterací b) Prostá iterace s rovnicí, využívající Taylorovy řady
Pro h = 0, Prostá iterace s rovnicí, využívající Taylorovy řady: Konverguje; x 0 = 0; 3 iterace Iterační metody Praktický příklad 3: sin x = x - h(5)
Iterační metody Praktický příklad 4: x.sin x = h(1) Podobný problém jako v předchozím případě. Existuje ještě jedna metoda, jak pracovat s takovýmito výrazy: Využijeme „pseudokonstantu“ sin x/x: x. sin x = h vynásobíme levou stranu zlomkem x/x a tím si na levé straně vytvoříme výraz sin x/x x 2.(sin x/x) = h pro x 0 je hodnota tohoto výrazu blízká 1 a se změnou x se mění velmi pomalu => vhodná do jmenovatele
Prostá iterace s rovnicí (h = 0, ): Pro x 0 = 0,001 Konverguje, 2 iterace Iterační metody Praktický příklad 4: x.sin x = h(2) 0,001 0, ,03514
Hodnoty konstant: a = 0,8474; b = 0,3; c = 3,27; d = 0,6697 Substituce: Iterační metody Praktický příklad 4: (1)
Hodnoty konstant: a = 0,8474; b = 0,3; c = 3,27; d = 0,6697 Substituce: x = u 2 /d Nahradíme cos pomocí sin, abychom mohli použít sin u/u: 1 – cos u = 2 (sin (u/2)) 2 Iterační metody Praktický příklad 4: (1)
1 – cos u = 2 (sin (u/2)) 2 =>u = 1,42998 x = 4,55932 Iterační metody Praktický příklad 4: (2)
Iterační metody Obecná pravidla Vytvořit graf rovnice. Zjistit, kde zhruba leží kořen rovnice. V případě, že jich je několik, ujistit se, který z nich hledáme. Vymyslet vhodnou iterativní metodu – jednu z těchto: –Prostá iterace s původní rovnicí –Prostá iterace s upravenou rovnicí (Taylorův rozvoj, využití pseudokonstanty sin x / x) –Newtonova metoda –Metoda regula falsi –Metoda půlení intervalů Metodu použít a otestovat správnost výsledků (např. pomocí grafu rovnice). Pokud je výsledek nesprávný, zjistit důvod a zkusit jinou metodu.
Domácí úkol 4 Máme kolejnici délky 1 km a 10 cm. Ohneme ji tak, aby mezi jejími konci byla vzdálenost 1 km. Jaká bude vzdálenost mezi spojnicí konců kolejnice a bodem ve středu kolejnice?