Numericky: menší krok NENÍ přesnější
Analytickou derivaci má člověk zřídka. Obvykle je funkce výsledek simulace, měření nebo kusu cizího kódu — a derivace se musí spočítat z hodnot. Vzorec je zřejmý:
A hned za ním je otázka: jak velké h? Intuice říká „co nejmenší, limita je přece pro h → 0“. Intuice se plete, a plete se způsobem, který vrátí věrohodné číslo místo chyby.
Dvě chyby proti sobě
- Useknutí ~ h². Zlomek není limita, a čím větší h, tím dál od ní.
- Zaokrouhlení ~ ε/h. Odečítají se dvě skoro stejná čísla, takže se ztratí platné číslice — a čím menší h, tím hůř. Při h ≈ 10⁻¹⁷ platí x + h = x a v čitateli zůstane nula.
Součet má minimum, a to je odpověď:
A tady je nález, který stojí za pozornost: vyšší řád automaticky neznamená lepší výsledek. Richardsonova extrapolace je čtvrtého řádu, takže její optimální krok je ε^(1/5) ≈ 7·10⁻⁴ — stokrát větší než u centrální diference. Pustí-li se při kroku vyladěném pro centrální diferenci, je horší než pravidlo, které měla vylepšit. Testy v repu to chytily a mají na to vlastní případ: řád a krok se musí měnit spolu.
| vzorec | řád | optimální h | vyhodnocení f |
|---|---|---|---|
| dopředná | 1 | ε^(1/2) ≈ 1,5·10⁻⁸ | 2 |
| centrální | 2 | ε^(1/3) ≈ 6·10⁻⁶ | 2 |
| Richardson | 4 | ε^(1/5) ≈ 7·10⁻⁴ | 4 |
| druhá derivace | 2 | ε^(1/4) ≈ 1,2·10⁻⁴ | 3 |
Poslední řádek je ten, na kterém se pohoří nejčastěji: druhá derivace se dělí h², takže zaokrouhlovací člen je ε/h² a nejlepší krok je mnohem větší. Ručně psaný Hessián s krokem 10⁻⁸ je šum — a přesně proto ho solver v téhle labce počítá s vlastním, větším krokem.
Kdy tohle všechno nepotřebujete. Když derivaci znáte analyticky, spočítejte ji analyticky — je přesná a levnější. Numerická derivace je pro případy, kdy funkci nemáte v ruce jako vzorec. A pokud máte kód, existuje třetí cesta, která má přesnost analytické a pohodlí numerické: automatické derivování. Tahle labka ho nepočítá, ale stojí za to vědět, že existuje.