Spojitost funkce na uzavřeném intervalu má závažné důsledky pro řešení rovnic. Následující věta dává postačující podmínku pro existenci řešení rovnice $f(x) = 0$ a dokonce i nabízí algoritmus jak toto řešení nalézt. Mimo to ji ještě dále s výhodou využijeme.
Povšimněte si, že není žádným omezením mít na pravé straně rovnice číslo $0$. Pokud bychom měli řešit rovnici $h(x) = g(x)$ pro neznámou $x$, vždy můžeme tento problém přeformulovat do tvaru $f(x) \ceq g(x) - h(x) = 0$.
Nechť funkce $f$ je spojitá na uzavřeném intervalu $\langle a,b \rangle$ a nechť $f(a) \cdot f(b) < 0$. Potom existuje bod $c\in (a,b)$ takový, že $f(c) = 0$.
Podmínka $f(a) \cdot f(b) < 0$ v předchozí větě kompaktně popisuje dvě vzájemně se vylučující se možnosti:
$f(a) < 0$ a $f(b) > 0$, nebo
$f(a) > 0$ a $f(b) < 0$.
Položme $a_1 \ceq a$ a $b_1 \ceq b$. Protože znaménka $f(a_1)$ a $f(b_1)$ jsou různá, nastane právě jedna ze tří možností
$f\left(\frac{a_1+b_1}{2}\right) = 0$,
znaménka $f(a_1)$ a $f\left( \frac{a_1 + b_1}{2} \right)$ jsou různá,
znaménka $f\left( \frac{a_1+b_1}{2}\right)$ a $f(b_1)$ jsou různá.
Dále postupujeme podle toho, která z těchto možností nastala:
Hledaným bodem $c$ je $\frac{a_1+b_1}{2}$ a věta je dokázána.
Položme $a_2 \ceq a_1$ a $b_2 \ceq \frac{a_1 + b_1}{2}$.
Položme $a_2 \ceq \frac{a_1 + b_1}{2}$ a $b_2 = b_1$.
Pokud nenastala první možnost, proveďme stejnou úvahu s $a_2$ a $b_2$ místo $a_1$ a $b_1$. Tímto způsobem postupně konstruujeme další $a_3$, $b_3$, atd. Pokud v některém z kroků nastane první možnost (tj. existuje $n$ tak, že $f\left(\frac{a_n+b_n}{2}\right) = 0$), pak je věta dokázána.
V opačném případě jsme zkonstruovali dvě posloupnosti $(a_n)_{n=1}^\infty$ a $(b_n)_{n=1}^\infty$ splňující
pro každé $n\in\mathbb{N}$. Obě posloupnosti jsou monotónní a omezené, tudíž existují jejich konečné limity, $a_n \to \alpha$ a $b_n \to \beta$ při $n\to\infty$. Navíc
Obě posloupnosti tedy mají stejnou limitu, označme ji $c \ceq \alpha = \beta \in \langle a,b \rangle$. Ze spojitosti funkce $f$ v bodě $c$ a Heineho věty nyní plyne
Ale protože všechny $f(a_n)$ mají různé znaménko od $f(b_n)$, můžou poslední rovnosti nastat pouze v případě, že $f(c) = 0$. Tím je důkaz věty dokončen.
$\square$
Důkaz předcházející věty je konstruktivní. Tvrzení věty, existenci čísla $c$, jsme dokázali jeho konstrukcí. Algoritmus použitý v důkazu se nazývá metoda půlení intervalu a lze ho prakticky použít k hledání řešení rovnice $f(x) = 0$. Jeho výhodou je, že máme pod kontrolou chybu výpočtu, hledané řešení $c$ vždy leží v intervalu $(a_n, b_n)$. Pokud délka tohoto intervalu je již kratší než požadovaná přesnost, můžeme algoritmus zastavit a třeba o průměru $\frac{a_n+b_n}{2}$ prohlásit, že se jedná o hledané řešení (v dané přesnosti). Nevýhodou metody půlení intervalu je její ne příliš vysoká rychlost (typicky je potřeba udělat více iterací než se dostaneme k požadované přesnosti). Později během semestru si ukážeme Newtonovu metodu, která často konverguje výrazně rychleji.
Předpoklad spojitosti v předešlé Větě 7.4 je podstatný. Jako příklad uvažme funkci
na intervalu $\langle a,b \rangle = \langle 0,1 \rangle$. Sice $f(0)\cdot f(1) = -1 < 0$, ale neexistuje bod $x\in(0,1)$ splňující $f(x) = 0$. Viz Obrázek 7.4.
Na tomto místě uveďme velmi jednoduchou ukázku použití metody půlení intervalu. Záměrně naivní Python implementace této metody (viz důkaz Věty 7.4) by mohla vypadat následovně:
def bisection(f, a, b, eps):
# Kontrola intervalu, případné prohození krajních bodů
if f(a) * f(b) >= 0:
raise BaseException("Nevhodný interval!")
if a > b:
a, b = b, a
# Počítadlo iterací, nultá aproximace
n = 0
x = (a + b) / 2
# Výpočetní cyklus
while b - a >= 2*eps:
if f(x) == 0:
return x, n
elif f(a) * f(x) < 0:
b = x
else:
a = x
x = (a + b) / 2
n += 1
# Vrátíme poslední aproximaci a počet iterací
return x, n
Funkce bisection
očekává spojitou funkci f
, jejíž nulový bod se snažíme nalézt v intervalu s krajními body a
a b
.
Dále musíme zadat požadovanou přesnost výpočtu eps
.
Metoda pak vrací aproximaci x
, která se od skutečné hodnoty nulového bodu liší nejvýše o eps
, a počet provedených iterací n
.
Použití této metody pro výpočet aproximací odmocniny ze dvou je nyní přímočaré.
Vezmeme funkci $f(x) = x^2 - 2$, tedy f = lambda x: (x ** 2) - 2
, a například $a = 0$ a $b = 3$.
Výsledky tohoto experimentu s různou přesností výpočtu jsou uvedeny v Tabulce 7.1.
V tomto případě je samozřejmě přesnost výsledku navíc limitována použitým datovým typem (zde 64 bitový float, viz podkapitolu 2.6).
Samotná metoda ale není v principu nijak omezená.
Pokud bychom chtěli větší přesnost, stačí použít jiný datový typ.
\(k\) | Aproximace \(\sqrt{2}\) | Počet iterací \(n\) |
---|---|---|
1 | \(1{,}406\,250\,000\,000\,000\,0\) | 4 |
2 | \(1{,}412\,109\,375\,000\,000\,0\) | 8 |
3 | \(1{,}414\,306\,640\,625\,000\,0\) | 11 |
4 | \(1{,}414\,215\,087\,890\,625\,0\) | 14 |
5 | \(1{,}414\,209\,365\,844\,726\,6\) | 18 |
6 | \(1{,}414\,212\,942\,123\,413\,0\) | 21 |
7 | \(1{,}414\,213\,567\,972\,183\,2\) | 24 |
8 | \(1{,}414\,213\,562\,384\,247\,8\) | 28 |
9 | \(1{,}414\,213\,561\,685\,755\,8\) | 31 |
10 | \(1{,}414\,213\,562\,296\,936\,3\) | 34 |
11 | \(1{,}414\,213\,562\,367\,876\,9\) | 38 |
12 | \(1{,}414\,213\,562\,372\,651\,7\) | 41 |
13 | \(1{,}414\,213\,562\,373\,078\,0\) | 44 |
14 | \(1{,}414\,213\,562\,373\,094\,0\) | 48 |
Tabulka 7.1: Aproximace hodnoty $\sqrt{2}$ získané pomocí metody půlení intervalu (viz důkaz Věty 7.4) aplikované na funkci $f(x) = x^2 - 2$ a body $a = 0$ a $b = 3$ s absolutní přesností $10^{-k}$. Výpočet byl zastaven po $n$ iteracích. Prvních „správných“ 17 cifer $\sqrt{2}$ je $1{,}414\,213\,562\,373\,095\,0$. Viz Příklad 7.6.
Funkce $f$ je spojitá na intervalu $J$, právě když $f\vert_J$ ($f$ zúženo na $J$) je spojitá v každém bodě intervalu $J$. Funkci $f$ nazýváme spojitou, právě když je $f$ spojitá v každém bodě svého definičního oboru. Množinu všech spojitých funkcí definovaných na intervalu $J$ značíme $\mathcal{C}(J)$.
Každá reálná monotónní posloupnost má limitu. Tato limita je konečná, právě když je daná posloupnost omezená.
Limita $\displaystyle \lim_{x\to a} f(x)$ je rovna $b \in \overline{\R}$, právě když $a$ je hromadným bodem $D_f$ a pro každou posloupnost $(x_n)_{n=1}^\infty$ s limitou $a$, jejíž členy splňují $\{x_n \mid n\in\N\} \subset D_f \smallsetminus \{a\}$, platí $\displaystyle\lim_{n\to\infty} f(x_n) = b$.