OptiLab kam se to sešlo?

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Co znamená „minimum" a jak se pozná

Tohle je jediná labka v akademii, kde se správnost dá ověřit bez jediné tabulkové hodnoty. Jinde se výsledek porovnává s normou nebo s příkladem z knihy. Tady je „x je minimum" testovatelné tvrzení, které si můžeme ověřit sami.

∇f(x*) = 0podmínka 1. řádu — nutná
∇²f(x*) ⪰ 0podmínka 2. řádu — spolu s první postačující

Nutná, ne postačující

První podmínka říká jen to, že funkce v tom bodě nikam neklesá ani nestoupá. To splňuje i maximum a i sedlo. Rozhodne až druhá derivace, a u více proměnných to znamená Hessián a jeho vlastní čísla:

vlastní čísla Hessiánuco to je
všechna kladnáminimum
všechna zápornámaximum
obojísedlo — v jednom směru dolů, v jiném nahoru
některé nulovédegenerovaný bod; derivace nerozhodne

Test na kladnou definitnost se nemusí počítat přes vlastní čísla. Choleského rozklad existuje právě tehdy, když je matice pozitivně definitní — takže „projde Cholesky?" je ta podmínka, ne její náhrada. Solver to tak dělá a testy taky.

A ještě jedna kontrola, která nepotřebuje derivace vůbec

Hrubá síla: šťouchni do nalezeného bodu dvěma sty směry a podívej se, jestli některý nevede níž. Je to primitivní a přesně proto cenné — nesdílí to žádný kód s metodou, která bod našla, ani s výpočtem derivací. Když se všechny tři kontroly shodnou, je to skoro jistě opravdu minimum.

Tahle trojice je důvod, proč se v téhle labce testuje odpověď, ne cesta k ní. Kniha se dá přepsat, ale stacionární bod se přepsat nedá.

Gradient a Hessián numericky

Když analytické derivace nejsou po ruce, spočítají se rozdílem. Centrální diference je o řád přesnější než dopředná a stojí jen jedno vyhodnocení navíc:

∂f/∂xᵢ ≈ [ f(x + h·eᵢ) − f(x − h·eᵢ) ] / 2hcentrální diference
h = ε^(1/3) · max(|xᵢ|, 1), ε ≈ 2,2·10⁻¹⁶krok, škálovaný podle velikosti xᵢ

Ten krok není libovolný. Moc velký a chyba useknutí roste; moc malý a odečtení dvou skoro stejných čísel spolyká platné číslice. Optimum pro centrální diferenci je třetí odmocnina strojové přesnosti, tedy asi 6·10⁻⁶. A škálování podle |xᵢ| je tam proto, že v robotice sedí v jednom vektoru milimetry a radiány — společný absolutní krok je pro jedno moc velký a pro druhé moc malý.

Vzorce v této kapitole

∇f — podmínka 1. řádu
∇f(x*) = 0 [—] nutná, ne postačující
∇²f — podmínka 2. řádu
všechna vlastní čísla ∇²f(x*) > 0 ⟺ Cholesky projde [—] postačující spolu s první
h — krok centrální diference
h = ε^(1/3)·max(|xᵢ|, 1) ≈ 6·10⁻⁶ [—] kompromis useknutí × zaokrouhlení
f′ — centrální diference
[f(x+h) − f(x−h)] / 2h, chyba O(h²) [—] dopředná má jen O(h)