Jak řešit rovnice, které neumíme vyřešit na papíře? Ukážeme si několik iterativních postupů pro hledání kořenů reálných funkcí jedné reálné proměnné. Metody porovnáme a zmíníme se i o několika zajímavých problémech vedoucích na tento typ úlohy.
Při studiu středoškolské matematiky čtenář již jistě narazil na problém řešení rovnice typu
Zcela jistě čtenář umí nalézt řešení kvadratické rovnice
Rovnice
Naproti tomu rovnice
Ve středoškolské matematice se v drtivé většině případů setkáváte s příklady rovnic
V mnoha a mnoha zajímavých příkladech (pár ukázek nabídneme čtenáři níže) nejsme schopni takovéto explicitní řešení nalézt. I přesto bychom chtěli danou rovnici alespoň v rámci jisté přesnosti vyřešit. Je to možné?
V tomto článku si nejprve ukážeme několik tzv. numerických (přibližných) algoritmů pro hledání řešení zadaných rovnic pomocí počítače. Poté si ukažme zajímavé příklady, kde nám středoškolské kuchařky pro řešení různých typů rovnic (trigonometrické, exponenciální, polynomiální) budou platné jako mrtvému zimník.
Soustřeďme se nyní na řešení úlohy nalézt řešení rovnice
Následující metody ukazují různé strategie, jak se snažit hledat řešení uvedené rovnice (o kterém v tento moment ani nevíme jestli existuje).
Každá z metod může na různých příkladech vykazovat různé výsledky.
Zdůrazněme, že se soustředíme na hledání alespoň jednoho řešení.
Nezabýváme se otázkou, jak nalézt všechny, je-li jich více.
Bez hlubší analýzy funkce
Vstupem této metody jsou dva body (čísla)
Nyní uvažme bod
Obrázek č. 1: Znázornění principu bisekční metody pro hledání řešení rovnice
Dále celý proces opakujeme s
Podstatnou výhodou této metody je její konvergence a kontrola chyby. Body které konstruujeme se neustále přibližují z obou stran k hledanému řešení.
Nevýhodou této metody je její relativně pomalá rychlost konvergence. Konkrétní ukázku nalezne čtenář na konci tohoto článku.
Princip této metody je stejný jako u metody bisekce.
Jediným rozdílem je způsob volby dělícího bodu intervalu.
Bisekce ho volí uprostřed daného intervalu, regula falsi k tomu účelu využívá lineární interpolaci funkce
Mějme tedy opět zadány dva body
Obrázek č. 2: Znázornění principu metody regula falsi pro hledání řešení rovnice
Regula falsi má podobné vlastnosti jako metoda bisekce.
Za předpokladu spojitosti funkce
Tato metoda vyžaduje vyhodnocování nejen funkčních hodnot funkce
Nejprve sestrojíme tečnu grafu funkce
Obrázek č. 3: Znázornění principu Newtonovy metody pro hledání řešení rovnice
Tímto způsobem se pokoušíme zkonstruovat posloupnost
Newtonova metoda trpí několika neduhy.
Algoritmus konstrukce této posloupnosti může selhat, například pokud derivace ve jmenovateli rekurentního vzorce je nulová (či velmi blízká nule v rámci pracovní přesnosti), nebo když průsečík tečny s osou
Optimisticky lze ale říci, že začneme-li s prvním bodem
Metoda sečny je variace Newtonovy metody pro funkce
Na vstupu je tedy zadána funkce
Obrázek č. 4: Znázornění principu metody sečny pro hledání řešení rovnice
U této metody si sice pamatujeme dva body, ale na rozdíl od metody bisekce a regula falsi hledané řešení neleží nutně mezi nimi.
Jedná se vlastně o diskrétní variantu Newtonovy metody (derivaci v ní nahrazujeme diferencí, porovnejte rovnici
I u této metody nemáme přílišnou kontrolu nad chováním zkonstruované posloupnosti. Obecně o ní platí podobné poznámky jako v případě Newtonovy metody.
V praktické implementaci nelze výše uvedené metody provádět až do nekonečna (všechny čtyři metody dávají nekonečné posloupnosti, o kterých doufáme, že konvergují k hledanému řešení).
Je nutné výpočet ve vhodný okamžik ukončit, jinak jsme pouze implementovali nekonečnou smyčku. K zastavení lze použít například následující kritéria:
Dále bývá dobrým zvykem v implementaci algoritmu nastavit jistý maximální povolený počet iterací. Pokud do tohoto maximálního počtu iterací nedosáhneme zastavovací podmínky, pak vrátíme chybu a ohlásíme selhání pokusu o nalezení řešení.
Představme si, že máme
Nechť je tedy zadáno
Je-li hladina ve výšce
Hledaná hladina
Obrázek č. 5: Ilustrace a řešení problému naplňování nádrží s pěti nádržemi a
Pro zajímavost uveďme graf funkce
Obrázek č. 6: Obrázek funkce
Newtonova metoda je využita v implementaci funkce
Příslušná cenzurovaná část kódu vypadá následovně:
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1,5F;
x2 = number * 0,5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the ****?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
return y;
}
První část kódu (až před řádek s komentářem // 1st iteration
) spočívá v nalezení první aproximace pro Newtonovu metodu.
Tuto část nebudeme podrobněji rozebírat, zájemce odkazujeme na již dříve zmíněnou stránku.
Poznamenejme, že se využívá znalosti tvaru strojového čísla a uvedený kód je optimalizován pro 32 bitový datový typ (odtud plyne i hodnota oné magické konstanty).
Těsně před koncem těla funkce se provede jeden krok Newtonovy metody (druhý krok je zakomentovaný, protože přesnost získaná v jednom kroku z vhodné počáteční aproximace je prakticky dostatečná).
Skutečně, rovnice
Porovnejme uvedené metody na několika jednoduchých konkrétních příkladech.
Jako testovací jednoduchý problém si zvolíme hledání druhé odmocniny ze dvou, tj. numerické hodnoty
Výpočet ve všech případech ukončíme pokud absolutní hodnota poslední aproximace je menší než
Shrnutí výsledků je následující (správné cifry jsou označeny pro přehlednost tučně):
Pro zájemce uvádíme i vyčerpávající tabulku s jednotlivými kroky algoritmů. Nejprve pro metodu bisekce.
# | ||||
---|---|---|---|---|
1 | 1,0 | 2,0 | 1,5 | 0,25 |
2 | 1,0 | 1,5 | 1,25 | 0,4375 |
3 | 1,25 | 1,5 | 1,375 | 0,109375 |
4 | 1,375 | 1,5 | 1,4375 | 0,06640625 |
5 | 1,375 | 1,4375 | 1,40625 | 0,0224609375 |
6 | 1,40625 | 1,4375 | 1,421875 | 0,021728515625 |
7 | 1,40625 | 1,421875 | 1,4140625 | 0,00042724609375 |
8 | 1,4140625 | 1,421875 | 1,41796875 | 0,0106353759765625 |
9 | 1,4140625 | 1,41796875 | 1,416015625 | 0,005100250244140625 |
10 | 1,4140625 | 1,416015625 | 1,4150390625 | 0,0023355484008789062 |
11 | 1,4140625 | 1,4150390625 | 1,41455078125 | 0,0009539127349853516 |
12 | 1,4140625 | 1,41455078125 | 1,414306640625 | 0,0002632737159729004 |
13 | 1,4140625 | 1,414306640625 | 1,4141845703125 | 8,200109004974365e-5 |
14 | 1,4141845703125 | 1,414306640625 | 1,41424560546875 | 9,063258767127991e-5 |
15 | 1,4141845703125 | 1,41424560546875 | 1,414215087890625 | 4,314817488193512e-6 |
16 | 1,4141845703125 | 1,414215087890625 | 1,4141998291015625 | 3,8843369111418724e-5 |
17 | 1,4141998291015625 | 1,414215087890625 | 1,4142074584960938 | 1,726433401927352e-5 |
18 | 1,4142074584960938 | 1,414215087890625 | 1,4142112731933594 | 6,474772817455232e-6 |
19 | 1,4142112731933594 | 1,414215087890625 | 1,4142131805419922 | 1,0799813026096672e-6 |
20 | 1,4142131805419922 | 1,414215087890625 | 1,4142141342163086 | 1,6174171832972206e-6 |
21 | 1,4142131805419922 | 1,4142141342163086 | 1,4142136573791504 | 2,687177129701013e-7 |
22 | 1,4142131805419922 | 1,4142136573791504 | 1,4142134189605713 | 4,056318516632018e-7 |
23 | 1,4142134189605713 | 1,4142136573791504 | 1,4142135381698608 | 6,845708355740499e-8 |
24 | 1,4142135381698608 | 1,4142136573791504 | 1,4142135977745056 | 1,0013031115363447e-7 |
25 | 1,4142135381698608 | 1,4142135977745056 | 1,4142135679721832 | 1,583661290993632e-8 |
26 | 1,4142135381698608 | 1,4142135679721832 | 1,414213553071022 | 2,6310235545778937e-8 |
27 | 1,414213553071022 | 1,4142135679721832 | 1,4142135605216026 | 5,236811428943611e-9 |
Nyní pro metodu regula falsi.
# | ||||
---|---|---|---|---|
1 | 1,0 | 2,0 | 1,3333333333333333 | 0,22222222222222232 |
2 | 1,3333333333333333 | 2,0 | 1,4 | 0,04000000000000026 |
3 | 1,4 | 2,0 | 1,411764705882353 | 0,006920415224913157 |
4 | 1,411764705882353 | 2,0 | 1,4137931034482758 | 0,0011890606420930094 |
5 | 1,4137931034482758 | 2,0 | 1,414141414141414 | 0,00020406081012214194 |
6 | 1,414141414141414 | 2,0 | 1,4142011834319526 | 3,501277966488914e-5 |
7 | 1,4142011834319526 | 2,0 | 1,41421143847487 | 6,007286838860537e-6 |
8 | 1,41421143847487 | 2,0 | 1,4142131979695434 | 1,030688757230891e-6 |
9 | 1,4142131979695434 | 2,0 | 1,4142134998513232 | 1,7683827158165855e-7 |
10 | 1,4142134998513232 | 2,0 | 1,4142135516460548 | 3,034065154672305e-8 |
11 | 1,4142135516460548 | 2,0 | 1,4142135605326258 | 5,2056330357430625e-9 |
Nyní, podstatně rychlejší, Newtonova metoda.
# | ||
---|---|---|
1 | 1,0 | 1,0 |
2 | 1,5 | 0,25 |
3 | 1,4166666666666667 | 0,006944444444444642 |
4 | 1,4142156862745099 | 6,007304882871267e-6 |
5 | 1,4142135623746899 | 4,510614104447086e-12 |
A konečně metoda sečny.
# | ||||
---|---|---|---|---|
1 | 1,0 | 2,0 | 1,3333333333333335 | 0,22222222222222188 |
2 | 1,3333333333333335 | 1,0 | 1,4285714285714286 | 0,04081632653061229 |
3 | 1,4285714285714286 | 1,3333333333333335 | 1,4137931034482758 | 0,0011890606420930094 |
4 | 1,4137931034482758 | 1,4285714285714286 | 1,41421143847487 | 6,007286838860537e-6 |
5 | 1,41421143847487 | 1,4137931034482758 | 1,4142135626888697 | 8,931455575122982e-10 |
Z výpočtů je vidět, že bisekce a regula falsi konvergují nejpomaleji. Naopak Newtonova metoda a metoda sečny dosáhnou řeší v požadované přesnosti v podstatně menším počtu iterací.
Tento článek byl vznikl v rámci řešení projektu Institucionální podpora Českého vysokého učení technického v Praze (CZ.02.2.69/0.0/0.0/16_015/0002382).