Devlog #93 – Fala 72: Filtr Kalmana, Propagacja Wsteczna, Wahadło 3D, Eutrofizacja, Soczewka Akustyczna i Pierścienie Planetarne

Fala 72 przynosi jedne z naszych najbardziej zaawansowanych matematycznie symulacji: pełnomacierzowy filtr Kalmana, który obserwuje, jak kurczy się jego własna niepewność, przepływ gradientu uwidoczniony przez sieć neuronową, wahadło 3D o trzech trybach fizycznych, jezioro, które nieodwracalnie przechyla się w kierunku zakwitu glonów, dźwięk kształtowany przez układ soczewek oraz dziesięć tysięcy cząstek pierścienia rozdzielonych przez rezonans.

Fala 72 — dodano 6 symulacji
633
Symulacji łącznie
6
Nowych w tej fali
72
Numer fali
93
Numer devlogu

Nowe symulacje

📡

Filtr Kalmana

Prawdziwy stan 4D [x,y,vx,vy] z pełną macierzą P 4×4. Forma Josepha dla stabilności numerycznej. Elipsa kowariancji z rozkładu na wartości własne. 4 trajektorie. RMSE: Kalman kontra surowe pomiary kontra sam model.

🔁

Propagacja wsteczna

Ręczna reguła łańcuchowa: MLP 2→H→H→{2|1}. ReLU/tanh/sigmoid + softmax-CE lub MSE. δ-impulsy animowane od prawej do lewej. Podświetlanie krawędzi ∂L/∂w. Mapa cieplna decyzji + wykres straty.

🎯

Wahadło 3D

RK4 we współrzędnych kartezjańskich z więzem mnożnika Lagrange'a. Tryby: płaska rozeta, stożkowy (T=2π√(Lcosθ/g)) oraz Foucaulta (siła Coriolisa Ω·sin(szer.)). Własna projekcja 3D z obrotem przeciąganiem.

🦠

Eutrofizacja

Pięć sprzężonych równań różniczkowych: fosfor, glony, tlen, ryby, detrytus. Beztlenowy recykling osadów → histereza. Wykres fazowy śledzi nieodwracalny punkt krytyczny. Integracja RK4 z wizualizacją zbiornika.

🔊

Soczewka akustyczna (FDTD)

Równanie falowe 2D 240×144, metoda leapfrog FDTD, granice absorbujące Mura pierwszego rzędu. Soczewka wypukła/wklęsła/Fresnela/GRIN paraboliczna. Nakładka promieni wg prawa Snella. Ciśnienie EMA weryfikuje ogniskową.

🪐

Pierścienie planetarne

Do 10 000 cząstek keplerowskich. Rezonans 2:1 z księżycem podobnym do Mimasa → kopnięcia przy koniunkcji → luka podziału Cassiniego. Obliczenie granicy Roche'a. Księżyce-pasterze utrzymują wąski pierścionek.

Filtr Kalmana: optymalna estymacja stanu

Filtr Kalmana (1960) to jeden z najbardziej udanych algorytmów matematyki stosowanej. Optymalnie łączy przewidywanie modelu dynamicznego z zaszumionymi pomiarami z czujników, tworząc nieobciążony estymator stanu o minimalnej wariancji — i, co kluczowe, dokładnie śledzi, jak bardzo jest niepewny, za pomocą macierzy kowariancji P.

Stan 4D i pełne operacje macierzowe

Wektor stanu to [x, y, v_x, v_y] — pozycja i prędkość w 2D. Macierz kowariancji P 4×4 śledzi niepewności i korelacje między wszystkimi składowymi stanu. Każdy krok predykcji oblicza:

x̂⁻ = F·x̂          (predykcja stanu przez macierz przejścia F)
P⁻  = F·P·Fᵀ + Q   (predykcja kowariancji, Q = szum procesu)

Każdy krok aktualizacji (przy otrzymaniu obserwacji pozycji 2D przez H = [I₂|0₂]):

K  = P⁻·Hᵀ·(H·P⁻·Hᵀ + R)⁻¹  (wzmocnienie Kalmana)
x̂  = x̂⁻ + K·(z − H·x̂⁻)       (aktualizacja stanu)
P  = (I − K·H)·P⁻·(I − K·H)ᵀ + K·R·Kᵀ  (forma Josepha)

Forma Josepha dla stabilności numerycznej

Standardowa aktualizacja P = (I−KH)P⁻ cierpi na asymetrię wynikającą z arytmetyki zmiennoprzecinkowej — po wielu iteracjach P może utracić dodatnią określoność. Forma Josepha P = (I−KH)P⁻(I−KH)ᵀ + KRKᵀ jest algebraicznie równoważna, ale numerycznie stabilna: gwarantuje, że P pozostaje symetryczna i dodatnio określona niezależnie od zaokrągleń zmiennoprzecinkowych.

Wizualizacja elipsy kowariancji

Niepewność pozycyjna 2D jest wizualizowana jako elipsa obliczona z rozkładu na wartości własne podmacierzy pozycyjnej 2×2 macierzy P. Półosie to √(λ₁) i √(λ₂) (odchylenia standardowe), a orientacja podąża za wektorami własnymi. Elipsa wizualnie puchnie podczas kroku predykcji i kurczy się, gdy nadchodzi obserwacja — piękna demonstracja cyklu informacyjnego filtra.

Propagacja wsteczna: przepływ gradientu uwidoczniony

Propagacja wsteczna to po prostu reguła łańcuchowa zastosowana efektywnie do grafu obliczeniowego — ale zrozumienie jej na poziomie intuicyjnym wymaga zobaczenia, jak impulsy gradientu przepływają wstecz przez każdą warstwę. Ta symulacja czyni ten przepływ jawnym.

Ręczna implementacja reguły łańcuchowej

Architektura sieci jest konfigurowalna: 2 wejścia → H jednostek ukrytych → H jednostek ukrytych → 2 (klasyfikacja) lub 1 (regresja) wyjścia. Każdy przebieg w przód oblicza aktywacje warstwa po warstwie. Każdy przebieg wsteczny oblicza błędy δ: warstwa wyjściowa otrzymuje δ_L = ∂L/∂z_L, następnie propaguje: δ_l = (Wᵀ_{l+1} · δ_{l+1}) ⊙ σ'(z_l). Gradienty wag to ∂L/∂W_l = δ_l · aᵀ_{l-1}.

Wizualna animacja gradientu

Podczas propagacji wstecznej kolorowe impulsy przemieszczają się od prawej do lewej przez diagram sieci. Grubość i intensywność koloru krawędzi reprezentują |∂L/∂w| dla każdej wagi. Duże gradienty świecą jasno; bliskie zeru (zanikający gradient) pokazane są jako przygaszone linie. Przy ReLU martwe neurony (zawsze zwracające 0) są jawnie oznaczone — ich wychodzące gradienty są trwale zerowe.

Wahadło 3D: więz mnożnika Lagrange'a

Wahadło sferyczne — masa na sztywnym pręcie, swobodnie wychylająca się we wszystkich kierunkach — jest łatwe do opisania fizycznie, ale niewygodne do symulacji numerycznej. Więzem jest to, że odległość od zawieszenia do masy jest zawsze dokładnie równa L. Zamiast przechodzić na współrzędne sferyczne (które wprowadzają osobliwości gimbal lock), symulacja działa we współrzędnych kartezjańskich i wymusza więz za pomocą mnożnika Lagrange'a.

RK4 kartezjańskie z projekcją więzu

Równania ruchu we współrzędnych kartezjańskich (x,y,z) to: m·r̈ = F_grawitacja + λ·r̂, gdzie λ to wielkość siły więzu (naprężenie). Na każdym kroku RK4, po swobodnym przesunięciu r i v, pozycje są rzutowane z powrotem na sferę, a prędkości na płaszczyznę styczną: λ = (−|v|² − r·g_wek) / L², następnie stosowana jest korekta. To zapewnia dokładne spełnienie więzu bez osobliwości układu współrzędnych.

Trzy tryby fizyczne

Eutrofizacja: punkt krytyczny jeziora

Eutrofizacja — wzbogacenie w składniki odżywcze prowadzące do zakwitu glonów i deficytu tlenu — jest jednym z najważniejszych przykładów katastroficznego punktu krytycznego w naukach środowiskowych. Gdy jezioro przekroczy próg, przeskakuje do mętnego, ubogiego w tlen stanu, który może utrzymywać się przez dekady, nawet po zmniejszeniu dopływu fosforu.

Układ pięciu sprzężonych równań różniczkowych

Symulacja całkuje pięć sprzężonych równań różniczkowych reprezentujących P (rozpuszczony fosfor), A (biomasa glonów), O (rozpuszczony tlen), F (biomasa ryb) i D (detrytus). Kluczową nieliniowością jest człon recyklingu fosforu: w warunkach beztlenowych (O poniżej progu) osad uwalnia zmagazynowany fosfor — dodatnie sprzężenie zwrotne, które popycha system do alternatywnego stanu stabilnego. Integrator RK4 niezawodnie radzi sobie ze sztywnymi przejściami.

Histereza i wykres fazowy

Wykres fazowy śledzi (ładunek fosforu, biomasa glonów) w czasie. Gdy ładunek powoli rośnie, system pozostaje w stanie czystej wody, aż nagle przeskakuje do stanu zakwitu w górnym punkcie bifurkacji siodło-węzeł. Gdy ładunek jest następnie zmniejszany, system pozostaje w stanie zakwitu aż do dolnego punktu bifurkacji siodło-węzeł — to jest histereza. Pole zamknięte przez pętlę histerezy na wykresie fazowym reprezentuje „dług odbudowy" — ile dodatkowego wysiłku potrzeba, by przywrócić jezioro w porównaniu z zapobieżeniem zakwitowi od samego początku.

Soczewka akustyczna: symulacja fal metodą FDTD

Ogniskowanie akustyczne — koncentrowanie fal dźwiękowych w punkcie — leży u podstaw ultrasonografii medycznej, sonaru i akustyki architektonicznej. Ta symulacja rozwiązuje równanie fali 2D bezpośrednio metodą różnic skończonych w dziedzinie czasu (FDTD), pokazując zaginanie się czół fal w czasie rzeczywistym.

Leapfrog FDTD i granice Mura

Równanie fali ciśnienia 2D ∂²p/∂t² = c²(∂²p/∂x² + ∂²p/∂y²) jest dyskretyzowane na siatce 240×144 metodą leapfrog: ciśnienie w chwili n+1 zależy od chwil n i n-1 oraz przestrzennego laplasjanu w chwili n. Warunek stabilności CFL wymaga c·dt/dx ≤ 1/√2. Warunek brzegowy absorbujący Mura pierwszego rzędu eliminuje odbicia od krawędzi siatki, dopasowując prędkość fali wychodzącej: p_brzeg(t+dt) = p_{brzeg+1}(t) + (c·dt−dx)/(c·dt+dx)·(p_{brzeg+1}(t+dt) − p_brzeg(t)).

Cztery typy soczewek

Pierścienie planetarne: cząstki keplerowskie i luki rezonansowe

Pierścienie Saturna są jedną z najbardziej fotogenicznych struktur Układu Słonecznego — a ich struktura jest kontrolowana przez mechanikę orbitalną. Podział Cassiniego, wyraźna luka między pierścieniami A i B, jest opróżniana przez rezonans orbitalny 2:1 z księżycem Mimas.

Cząstki keplerowskie i kopnięcia rezonansowe

Do 10 000 cząstek testowych umieszczonych jest na orbitach keplerowskich z półosią wielką a rozłożoną jak n ∝ a^(−3/2) (płaska gęstość powierzchniowa). Każda cząstka otrzymuje kopnięcie grawitacyjne od księżyca podobnego do Mimasa przy każdej koniunkcji. W promieniu rezonansu 2:1 (gdzie cząstka wykonuje dokładnie 2 orbity na jedną orbitę księżyca) kopnięcia te zawsze zachodzą w tej samej fazie orbitalnej — kumulują się spójnie i podbijają mimośród, aż orbita zaczyna się przecinać, po czym cząstka jest szybko rozpraszana. Po tysiącach orbit promień rezonansu wykazuje lukę gęstości odpowiadającą podziałowi Cassiniego.

Granica Roche'a i księżyce-pasterze

Granica Roche'a R_Roche = a_planeta · (2ρ_planeta/ρ_satelita)^(1/3) wyznacza miejsce, w którym siły pływowe przewyższają samograwitację — księżyce wewnątrz niej są rozrywane na materiał pierścieni. Symulacja obsługuje także pary księżyców-pasterzy: dwa małe księżyce okalające wąski pierścionek wymieniają moment pędu z cząstkami pierścienia, utrzymując pierścionek ściśle ograniczony — mechanizm stojący za strukturą pierścienia F Saturna.

Co dalej

Fala 73 to specjalne wydanie WebGL/GLSL: wszystkie pięć symulacji wykorzystuje własne shadery, raymarching lub techniki GPGPU. Nadchodzi: raymarching fraktala 3D Mandelbulb z estymatorem odległości, gąbka Mengera SDF z wymiarem Hausdorffa, osadzenie paraboloidy Flamma tunelu czasoprzestrzennego Morrisa-Thorne'a, produkt sferyczny supershape Gielisa oraz symulacja GPGPU z 250 000 cząstek wykorzystująca cele renderowania ping-pong.

← Devlog #92 Devlog #94 →