Adaptivní kvadratura — a kde je slepá
Rovnoměrná mřížka utrácí stejně na místech, kde je funkce nudná, jako tam, kde se láme. To je plýtvání — a v úloze, kde jedno vyhodnocení znamená spustit simulaci, plýtvání drahé.
Adaptivní metoda si mřížku volí sama: spočítá interval jednou celý a jednou po polovinách, a když se výsledky liší víc, než je dovoleno, půlí dál. Rozdíl mezi hrubým a jemným odhadem je odhad zbývající chyby — je to Richardsonova extrapolace z DerivLabu, jen použitá jako kritérium místo jako oprava.
Na špičaté úloze to funguje přesně tak, jak má: testy měří, že intervaly u vrcholu jsou jedenáctkrát kratší než ty na okrajích, a nikdo to metodě neřekl.
Nález: adaptivní metoda může být naprosto přesvědčená a naprosto vedle
Přepni obrázek na úlohu wave, tedy sin(12x)·e^(−x/2) na intervalu [0, π]. Adaptivní Simpson vrátí 4,4·10⁻¹⁶ po pěti vyhodnoceních. Správná odpověď je 0,0659.
Důvod: první, co metoda udělá, je vyhodnocení v bodech 0, π/4, π/2, 3π/4 a π. Při frekvenci 12 je sin(12x) v každém z nich přesně nula. Metoda tedy vidí nulu všude, kam se podívá, usoudí, že integrál je nula, odhadne chybu jako nulovou — a skončí. Naprosto konzistentně. Jenom se to netrefilo.
Tohle není chyba implementace. Je to cena, kterou platí každá metoda, jejíž odhad chyby je postavený ze vzorků: vzorky nemohou vidět to, co padne mezi ně. Žádné zpřísnění tolerance nepomůže — v obrázku to jde zkusit, chyba se nezmění, protože metoda si myslí, že tolerance je splněna s rezervou.
Praktický důsledek: u periodické nebo oscilující funkce se nikdy nespoléhej na automatiku. Buď se ví, jaká je nejvyšší frekvence, a mřížka se volí ručně (viz FourierLab, vzorkovací věta), nebo se výsledek ověří druhou metodou s jinými uzly — Gauss má uzly jinde než Simpson, takže obě naráz nesednou na nuly.