Splajnová interpolácia
Na stránke SHMÚ nájdeš klimatologické mapy Slovenska. Hovoria o priemernej teplote, zrážkach, či vyparovaní vlahy zo zeme. Nie je to predpoveď toho, aká bude teplota alebo zrážky v budúcnosti. Sú to mapy aktuálneho stavu a stavu v blízkej minulosti (ako to vyzeralo v predošlom mesiaci).
Po území Slovenska je umiestnených veľa meteorologických staníc merajúcich teplotu, zrážky, vlhkosť vzduchu, silu vetra a ďalšie meteorologické veličiny. Dozvedieť sa klimatologické podmienky v ich okolí nie je ťažké. No predstav si, že si predseda družstva, máš siať na poliach pod Rakycami, ale nevieš či tam dať niečo, čo má rado sucho alebo vlhko. Rád by si si pozrel aká je po zime vlhkosť pôdy, ale stanice sú ďaleko a ty nemáš informácie.
Našťastie pre teba je tu matematika, ktorá ťa zachráni. Pomocou nej sa dajú dosť dobre odhadnúť hodnoty veličín aj na miestach, kde nie sú namerané. Z týchto odhadov sa spraví klimatologická mapa, ty sa na ňu pozrieš a vieš, čo máš pod Rakycami zasadiť.
Jeden zo spôsobov, ako robiť odhady je interpolácia a tú si teraz ukážeme. Aby to nebolo iba nudné čítanie, nachystali sme ti taký malý príkladíček s teplotou, ktorý môžeš s nami rátať. Sľubujeme, že je to veľmi zjednodušený príklad, aby si sa vyhol ohavnej matematike, ktorá tam v realite na človeka striehne. Celý nasledovný článok je taká úvaha, ako sa k danej metóde výpočtu dostaneme, tak sa nezľakni, keď miestami odbočíme.
Interpolácia
Ako sme už vyššie spomenuli, interpolácia sa používa na odhadovanie chýbajúcich hodnôt. Údaje môžu chýbať medzi nameranými veličinami, no takisto ich môže byť treba odhadnúť mimo rozsahu nameraných hodnôt. Preto si v krátkosti predstavíme dva pojmy - interpoláciu a extrapoláciu. Extrapoláciou sa zaoberať nebudeme. Vo zvyšku článku sa povenujeme iba interpolácii.Predstav si, že od rána 8:00 do večera 19:00 meriaš každú hodinu teplotu. Teraz chceš zistiť teplotu o 12:30. Tú nameranú nemáš, takže to musíš odhadnúť. Aby to bolo presnejšie ako číslo, ktoré si len tak vymyslíš, treba to nejak zrátať. Presne na toto slúži interpolácia. Ona slúži na to, aby sa čo najviac presne dali určiť hodnoty medzi nameranými hodnotami. Extrapolácia je zasa metóda, pomocou ktorej sa určuje hodnota, ktorá už nie je v rámci nameraných údajov. Extrapoláciu by si použil, keby chceš vedieť teplotu o 19:53.
My sa budeme baviť ďalej iba o teplote, ale v skutočnosti môžeš interpolovať hocičo. Napríklad geodeti interpolujú nadmorskú výšku alebo v počítačoch sa niekedy takto dopočítava farba pixelov.
Iný spôsob interpolácie je polynomiálna interpolácia. Pri nej sa hľadá polynóm, o stupeň menší, ako je údajov (keď je napr. 10 údajov, tak polynóm bude stupňa 9). Táto funkcia už dokáže trafiť namerané body, no nevýhoda je, že okolo nameraných bodov začne robiť blbosti (osciluje okolo nich).
Spôsob, ktorý rieši tieto problémy sa nazýva splajnová interpolácia. Funguje to tak, že na tie namerané hodnoty akokeby spustíš gumovú hadicu. Ona ostane zavesená na tých nameraných údajoch, ale sa tak jemne poohýba. Tvrdosť alebo mäkkosť hadice sa dá regulovať. Od toho závisí, ako veľmi bude pri nameraných bodoch ovísať.
Od tohto poetického opisu splajnovej interpolácie poďme k matematike. V praxi to funguje tak, že sa zo susedných bodov spraví nejaká funkcia a tá je definovaná na intervale medzi týmito bodmi. Môže to byť napríklad polynóm prvého, druhého alebo tretieho stupňa (teda lineárna, kvadratická alebo kubická funkcia). Najčastejšie to býva polynóm tretieho stupňa, pretože pri ňom sa výsledná funkcia najlepšie približuje k údajom a je čo najhladšia, hlavne na zlomoch. Pretože keď sa to robí napríklad lineárnou funkciou, tak sa to na nameraných bodoch prudko mení. No svet tak nefunguje. Medzi teplotami o 11:59 a 12:01 nie je veľká zmena.
Naozajstný problém
Ak ťa už z tohto bolí hlava, tak sa bež na chvíľu prejsť na vzduch lebo toto bol len začiatok 😊. Skutočný problém, ktorý sa musí riešiť, je trochu zložitejší. Predstav si naše Slovensko. Po rôznych miestach na ňom sú rozostavané meteorologické stanice merajúce teplotu a iné rozličné veci. Aby sme sa na každom kroku o ne nepotkýnali, nie sú zas nastavané každé dva metre. No teplotu chceme vedieť na hociktorom mieste medzi nimi.
Táto funkcia sa tiež nazýva splajnová, ale funguje inak ako splajnová funkcia spomenutá vyššie. Podobné sú iba v tom, že obe funkcie chcú čo najlepšie trafiť namerané hodnoty a zároveň byť čo najhladšie.
Pri teplote nameranej každú hodinu bolo ľahké povedať, že teplota o 13:16 bude medzi teplotami o 12:00 a 14:00. Pri viacrozmerných vstupných údajoch je už problém nájsť dvoch susedov, pretože ktorí z nich sú tí správni? Ktoré sú tie dve dediny, ktoré susedia so Sásou? Pliešovce a Bzovská Lehôtka alebo Babiná a Dobrá Niva? Či Pliešovce a Dobrá Niva? Ťažko určiť. Preto splajnová funkcia vo viacrozmernom priestore funguje inak a s tou, čo sme si vysvetlili má spoločné len meno a to, že chce čo najlepšie trafiť údaje a byť čo najhladšia.
Hľadanie najdokonalejšej funkcie
Najdokonalejšia funkcia, akú vieme dostať musí teda spĺňať dve kritériá. Musí čo najlepšie trafiť údaje a byť čo najhladšia. Hľadanie tej pravej, dokonalej ❤ funkcie sa v matematike nazýva variačný problém. Ide o to, nájsť funkciu, ktorá bude čo najlepšie spĺňať obe podmienky.Chceme nájsť chybu, ktorá je medzi skutočnými hodnotami $z$ a ich odhadom pomocou funkcie $S$. Pomocou rozdielu $z_j - S(x_j)$ zistíme, ako sa odhadnuté údaje líšia od skutočnosti. Umocnenie rozdielu $(z_j - S(x_j))^2$ zamedzí tomu, aby sa chyby navzájom vynulovali (jeden rozdiel bude 2, druhý -2, celková chyba je 0. Niečo tu trošku smrdká.) a zároveň väčšie chyby zvýrazní viac. Váha $w_j$ býva číslo medzi 0 a 1 a hovorí o tom, na koľko percent chybe dôverujeme (napríklad o 10:00 sme teplomer zabudli v tieni, takže nameraná teplota nebude natoľko výpovedná ako ostatné). Suma $\sum_{j=1}^{N}(z_j - S(x_j))^2 \, w_j$ iba spočíta všetky rozdiely medzi skutočnosťou a odhadom dokopy.
Druhý člen $w_0 \, I(S)$ ráta to, ako veľmi je funkcia hladká. O chybe hladkosti hovorí konkrétne funkcia $I(S)$. Je to pestrá zmes integrálov a derivácií, takže tým ťa zaťažovať nebudeme. Váha $w_0$ vyjadruje akúsi rovnováhu medzi hladkoťou funkcie a tým, ako presne triafa údaje.
Na konci výrazu je $=\; \min$, čím chceme povedať, že chyba zložená z chyby odhadnutých údajov a chyby hladkosti funkcie má byť čo najmenšia.
🦉 ÚLOHA
Vyskúšaj si, či by si vedel nájsť optimálny model ty. Uľahčíme ti to a budú na výber iba dva modely.- $3x-18$
- $4x-30$
| x | 10 | 11 | 12 |
| meranie | 10 | 20 | 16 |
Váhy sú nasledovné: $w_1=0.5$, $w_2=0.9$ a $w_3=0.75$.
Tento problém našťastie už vyriešili pred nami. Vyšla im z toho funkcia, o ktorej si teraz povieme. Na svojom vstupe berie troj a viacrozmerné údaje a to je príliš komplikované na vysvetľovanie. Preto si problém zľahčíme. Prenesieme sa do sveta iba 1D vstupných údajov.
"Nameranie" údajov
Príklad treba na niečom vysvetliť, tak sme od rána do večera každú hodinu merali teplotu. Zaujímala by nás však aj teplota medzi meraniami. Tú nemáme a tak si ju skúsime dopočítať splajnovou interpoláciou.Teraz ti prezradíme veľké tajomstvo, ale nikomu to nehovor 😉. Teplotu sme v skutočnosti nemerali, ale na jej nasimulovanie sme použili kvadratickú funkciu.
🦉 ÚLOHA
Skús nájsť takú kvadratickú funkciu $f(x) \;=\; a\,x^2+b\,x+c$, ktorá nasimuluje pekný májový deň. Ráno bude chladné, okolo 6°C. Na obed vystúpi teplota na 22°C a na večer klesne na 14°C. Ideálne keď si to najprv premyslíš sám, v hlave, bez počítača a až potom si výsledok overíš.My sme použili nasledovnú funkciu: $f(x) \;=\; -0.1\,x^2+0.5\,x+20$. Pripočítali sme k nej aj náhodné čísla od 0 po 2, aby sme vniesli trochu šumu do údajov. Veď ani naozajstná teplota nesleduje kvadratickú funkciu do bodky presne.
Prvý pokus o interpoláciu
Ideme dať prvý pokus o dopočítanie údajov medzi nameranými hodnotami. O 10:00 je nameraných 10°C a o 11:00 bude teplota 20°C.🦉 ÚLOHA
Akú teplotu by si tipoval o 10:30, 10:45, 10:15 a 10:20?🌡️ Riešenie (klikni na mňa)
Všimni si, že výsledná teplota v bode, v ktorom ju rátame, závisí od toho, ako ďaleko je daný bod od bodov s nameranými hodnotami. Keď bol bližšie k 10:00, viac teploty sa bralo z 10:00 a keď bol bližšie k 11:00, viac teploty sa bralo odtiaľ.
O 12:00 teplota klesne na 16°C.
🦉 ÚLOHA
Nakresli si to na papier. O 10:00 je teplota 10°C, o 11:00 je 20°C a o 12:00 je 16°C.Zakresli si tam aj teploty o 10:15, 10:20, 10:30, 10:40. Rátal si ich v minulej úlohe. Ešte tam doplň teploty o 11:20, 11:30 a 11:45. Tie nemáš nikde, musíš ich vypočítať.
Spôsob, ktorým si teraz rátal teploty sa nazýva lineárna interpolácia. Mal by si z toho dostať nejaký takýto graf:
Zjemnenie prechodov medzi nameranými bodmi
O 11:00 vidíš, ako sa teplota láme. Rozdiel medzi teplotami o 10:59 a o 11:01 je pomerne veľký. V krátkom časovom okamihu sa teplota v reálnom svete mení viac plynulo. Navyše teplota sa dá vyskladať iba z dvoch susedných bodov. V budúcnosti sa to stane problémom, lebo teplotu budeme rátať z viacerých susedov.Prechod chceme plynulejší a do výpočtu chceme brať viacero susedov. Vedci zistili, že je fajn dávať vzdialenosť medzi bodmi do funkcie $e^{-r^2}$. Za písmenko $r$ sa dosádza absolútna hodnota vzdialenosti medzi bodmi.
🦉 ÚLOHA
Zober si svoje obľúbené časy (ty vieš ktoré) a vyrátaj pre ne váhy pomocou funkcie $e^{-r^2}$Nech nás neohováraš po susedoch, že sme na teba zlí, tu je tabuľka s vyrátanými vzdialenosťami. Nech je tvoj život ľahší. A nech je ešte ľahší, stačí, keď vyrátaš ľubovoľných päť váh.
| 10 | 11 | 12 | |
| 10:15 | 0.25 | 0.75 | 1.75 |
| 10:20 | 0.33 | 0.66 | 1.66 |
| 10:30 | 0.5 | 0.5 | 1.5 |
| 10:45 | 0.75 | 0.25 | 1.25 |
| 11:20 | 1.33 | 0.33 | 0.66 |
| 11:30 | 1.5 | 0.5 | 0.5 |
| 11:45 | 1.75 | 0.75 | 0.25 |
🕙 Riešenie (klikni na mňa)
Odbočka - násobenie funkcií
Už vieš, ako vyrátať hodnoty funkcie $e^{-r^2}$. Teraz si trochu odskočíme a pozrieme sa na to, ako vzájomné násobenie funkcií ovplyvňuje ich tvar. Chceme ti tým ukázať, že keď sa na vzdialenosti použije funkcia $e^{-r^2}$, tak ovplyvní tvar výslednej splajnovej funkcie.Na ukážku použijeme jednoduchú lineárnu funkciu $y=r$. Jej hodnoty sa prenásobia hodnotami funkcie $e^{-r^2}$. Prv než si to pozrieš na grafe, skús si pár hodnôt vyrátať.
🦉 ÚLOHA
Tu je pár hodnôt lineárnej a $e^{-r^2}$ funkcie. Vyrátaj ich súčin a nakresli si to do grafu.| r | 0 | 0.25 | 0.5 | 0.75 | 1 |
| $y=r$ | 0 | 0.25 | 0.5 | 0.75 | 1 |
| $y=e^{-r^2}$ | 1 | 0.94 | 0.78 | 0.57 | 0.37 |
| $y=r*e^{-r^2}$ |
📈 Riešenie (klikni na mňa)
Problém pri viacrozmerných údajoch
Pri viacrozmernom vstupe narazíme na problém. Na obrázku má Dobrá Niva 25°C. Okrem nej sú tam aj ďalšie dediny s nameranou teplotou a váhou, ktorou prispievajú do teplôt ostatných dedín. Každá dedina samozrejme prispieva sama sebe 100% teploty, čiže sama so sebou má tento násobok 1. Ak by sme pomocou nich chceli vyrátať teplotu v Dobrej Nive, mala by nám vyjsť tiež 25°C, nie?
Vedci našli spôsob, ako sa vyhnúť tomuto problému. Namiesto nameraných teplôt treba nájsť iné čísla, a to také, že keď sa vynásobia s váhou, tak dajú dokopy nameranú teplotu. Tieto čísla sú neznáme a treba ich vyrátať. Od vedcov dostali označenie gréckym písmenom lambda $\lambda$. Jednotlivé čísla sú označené ako $\lambda_1, \lambda_2, \lambda_3, ..., \lambda_n$.
🦉 ÚLOHA
Vrátime sa k jednoduchému príkladu s tromi teplotami, lebo na takom sa to najľahšie ráta:| x | 10 | 11 | 12 |
| meranie | 10 | 20 | 16 |
Z teplôt o 10:00 a 12:00 vyrátaj teplotu o 11:00. Logicky by to malo sedieť s tým, čo je namerané. Sedí to? Nebudeme ťa dlho napínať, nesedí to. Vyrátaná teplota je (klikni sem): Chceli sme ti len ukázať, že doterajší spôsob uvažovania nebude fungovať ani na takomto jednoduchom príklade.
🏡 Chceme znova vyrátať teplotu o 11:00 a tento raz už dobre. Skús prísť na to, ako by si tieto neznáme čísla $\lambda$ našiel.
🏡 Riešenie (klikni na mňa)
To neznáme číslo $\lambda$ tu slúži ako niečo, čo zachytáva správanie údajov. Pohľadali sme také čísla, ktoré spolu s váhami vzdialeností dávajú namerané teploty.
Trendová funkcia
Lenže to nie je všetko. Náš príklad je príliš jednoduchý a tak lambda jednoducho zachytí trend. Na Slovensku je veľa meteorologických staníc a tak lambda sa nemusí naučiť všetko a potom bude dávať zlé výsledky. Preto jej pomôžeme niečím, čo sa volá trendová funkcia.Na nameraných teplotách si môžeš všimnúť, že majú akýsi trend/tendenciu vo všeobecnosti nejako rásť či klesať. Naše do obeda rastú a po obede klesajú.
🦉 ÚLOHA
Vrátime sa k úlohe, kde si hľadal ideálny model pre namerané hodnoty. Určite si zistil, že je to model $3x-18$. Úlohu ti trochu uľahčíme a hodnoty, ktoré vracia model vyrátame za teba:| x | 10 | 11 | 12 |
| meranie | 10 | 20 | 16 |
| $3x-18$ | 12 | 15 | 18 |
Na papier si nakresli graf, kde zaznačíš namerané hodnoty aj aj hodnoty modelu. Máš? Dobre. Teraz odčítaj hodnoty modelu od tých nameraných a nakresli to na papier. Vidíš ten rozdiel? Čísla, ktoré si dostal po odčítaní sú si podobné a sú oveľa menej rozptýlené.
Takto to vyzerá na našich údajoch.
🦉 ÚLOHA
Skús túto opravu aplikovať na príklad s teplotami o 10:00, 11:00 a 12:00, aby si tento raz už naozaj našiel tie správne $\lambda$.🎆 Riešenie (klikni na mňa)
Trendovú funkciu musíme ale znovu prirátať a tak výsledný model bude mať nasledovnú podobu:
P.S.: skús si zodpovedať otázku, že prečo sa tá trendová funkcia musí prirátať naspäť?
$T$ je trendová funkcia. Je to polynóm nízkeho stupňa, ktorý zachytáva všeobecný vývoj údajov (či celkovo stúpajú, klesajú alebo idú rovno). $T(x)$ je výsledok trendovej funkcie pre dané $x$.
$R(x,x_j)$ je funkcia, ktorá sa nazýva "radial basis" funkcia. Do nej sa dáva $x$, pre ktoré sa meria teplota a nejaké susedné $x_j$. Vyráta sa vzdialenosť medzi nimi a pomocou "radial basis" funkcie sa vyráta, ako veľmi budú tieto x-ká na seba vplývať. Čím sú bližšie, tým na seba vplývajú viac. My sme použili $e^{-r^2}$, ale dá sa použiť ľubovoľná funkcia.
$\sum_{j=1}^{N}\lambda_j\,R(x,x_j)$ nám hovorí o tom, že všetky body prispievajú do výslednej teploty v $x$. Prechádzajú sa teda všetky body, pre každý bod sa zoberie jeho $\lambda$ a $R(x,x_j)$ funkcia, ktorá vráti násobok, akým $x_j$ prispeje do výslednej teploty $x$.
Trendová funkcia zachytáva celkové správanie údajov. Tým, že sa k trendovej funkcii pripočíta $\sum_{j=1}^{N}\lambda_j\,R(x,x_j)$, tak sa každý bod upraví tak, aby čo najlepšie sedel s nameranými hodnotami. Vďaka tomu sa trendová funkcia prispôsobí čo najlepšie údajom a snaží sa zostať čo najviac hladká.
🦉 ÚLOHA
Vo vzorci $S(x) \;=\; T(x)+\sum_{j=1}^{N}\lambda_j\,R(x,x_j)$ je zhrnuté všetko, čo sme doteraz robili. Over si, že či je postup správny a vyrátaj teploty pre 10:00, 11:00 a 12:00. Mali by sa rovnať tým nameraným.⛅ Riešenie (klikni na mňa)
Odhadovanie teplôt
Overené je a funguje to. Teraz už môžeme model použiť na odhadovanie teplôt v akomkoľvek čase medzi 10:00 a 12:00. Vyráta sa vzdialenosť medzi časom a každým nameraným bodom. Tieto vzdialenosti sa prejdú funkciou $e^{-r^2}$ a prenásobia sa vyrátanými lambdami. Teplota v danom bode je hotová.🦉 ÚLOHA
Vyrátaj teplotu o 10:15, 10:20, 10:30 a 10:45.☀️ Riešenie (klikni na mňa)
🦉 ÚLOHA
Skús sa z tohto celého vymotať a napíš si celý postup interpolácie. Od bodu, kedy máš namerané hodnoty v nejakom čase až po bod, kedy vieš dorátať teploty medzi týmito nameranými bodmi.🌪 Riešenie (klikni na mňa)
To je už všetko. Musíš si nájsť nejaké nové príklady na počítanie. Ak po tomto článku nevieš dokonale rátať splajnovú interpoláciu a sem-tam sa našla drobnosť, ktorej si nerozumel, nevadí. Pointou bolo ukázať využitie funkcií v reálnom živote.
Budeme radi, ak si odnesieš poznanie, že tie pochabosti, ktoré sa musíš učiť, nie sú úplne na nič. Nepriamo sa s nimi stretávaš denne, či už pri pozeraní počasia, dopestovanom jedle alebo pri zabránených požiaroch, ktoré mohli prepuknúť a neprepukli. Možno sa raz stretneš s nimi aj priamo, ako človek tvoriaci potrebné podklady pre ďalších ľudí. Dúfame, že si si užil matematiku v praxi, a že sme ťa nepotrápili veľa, ale len tak trošku.😊
