MatrixLab tabulka, která něco dělá

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.

Pseudoinverze: nejlepší odpověď, když žádná neexistuje

Kapitola 4 skončila u nepříjemné možnosti: soustava nemá řešení. V praxi je to nejčastější případ, ne výjimka — kdykoli se proloží víc naměřených bodů méně parametry, je rovnic víc než neznámých a přesné řešení skoro jistě neexistuje.

Vzdát to by bylo hloupé. Když se nedá dojít přesně na cíl, dá se dojít co nejblíž — a „co nejblíž“ je z kapitoly 5 VectorLabu: projekce.

xyrovnic × neznámých6 × 2přeurčená soustavanejlepší přímkay = 2,18 + 0,62·xsoučet čtverců odchylek0,6647zbytky ⊥ sloupce A0,000000 , 0,000000
Ty svislé čárky jsou zbytky. Součet jejich ČTVERCŮ je nejmenší možný — a přesně proto jsou kolmé na sloupce A: kdyby nebyly, dala by se přímka ještě posunout a reziduum zmenšit.
Přidávej body. Rovnic je čím dál víc než neznámých a žádná přímka jimi neprojde všemi — ta nakreslená ale minimalizuje součet čtverců svislých čárek. Vpravo dole je kontrola: zbytky jsou kolmé na sloupce A, na šest desetinných míst.
x⁺ = A⁺·b    minimalizuje   ‖A·x − b‖nejmenší čtverce přes pseudoinverzi

Proč zrovna čtverce

Není to libovůle. Minimalizovat součet čtverců znamená hledat nejbližší bod v eukleidovské vzdálenosti — a nejbližší bod podprostoru je přesně kolmý průmět. Odtud plyne podmínka, kterou obrázek výše měří: zbytek musí být kolmý na obraz. Kdyby nebyl, dala by se odpověď posunout ve směru té nekolmé složky a reziduum by se zmenšilo — takže by nešlo o minimum.

Co pseudoinverze dělá

Ze SVD (kapitola 10) je to jednořádkové: obrátit nenulové singulární hodnoty a nulové nechat být.

A = U·Σ·Vᵀ  ⟹  A⁺ = V·Σ⁺·Uᵀ, kde Σ⁺ = 1/σᵢ pro σᵢ > 0, jinak 0pseudoinverze ze SVD

Ta druhá polovina je celý trik. Kdyby se obracelo i to, co je nula, vyjde nekonečno; kdyby se obracela hodnota 10⁻¹⁶, vyjde 10¹⁶ a odpověď je šum vynásobený obrovským číslem. Tomu prahování se říká oříznutá SVD a je to nejjednodušší forma regularizace.

Přesně tuhle chybu tenhle solver udělal. První verze prahovala na 10⁻¹², což je pro SVD počítanou přes AᵀA pod úrovní šumu — a pseudoinverze poslušně obrátila singulární hodnotu 7,7·10⁻⁹ na koeficient 1,3·10⁸, čímž porušila Moore-Penroseovy podmínky. Testy to chytily. Práh je teď 10⁻⁷ relativně; viz komentář v solveru a kapitola 7.

Když je řešení naopak moc

Pseudoinverze zvládne i opačný případ — nekonečně mnoho řešení — a vybere z nich to nejkratší. To není jen matematická úhlednost: u redundantního ramene je „nejkratší řešení“ ta kombinace rychlostí kloubů, která dosáhne požadovaného pohybu s nejmenší námahou. Viz KineLab.

Čtyři podmínky, které ji definují

A A⁺A = A    A⁺A A⁺ = A⁺    (AA⁺)ᵀ = AA⁺    (A⁺A)ᵀ = A⁺AMoore-Penroseovy podmínky

Ty čtyři rovnosti pseudoinverzi definují — pro každou matici existuje právě jedna, která je splňuje. Testy v repu je proto kontrolují přímo, a to i na maticích s vědomě závislými sloupci: ověřuje se tím ta věc sama, ne jeden její důsledek.

Vzorce v této kapitole

A⁺ — Moore-Penroseova pseudoinverze
A⁺ = V·Σ⁺·Uᵀ, Σ⁺ᵢᵢ = 1/σᵢ pro σᵢ > práh, jinak 0 [—] kap. 12
lstsq — nejmenší čtverce
x = A⁺b minimalizuje ‖Ax − b‖ [—] kap. 12