Üksikud sõlmed 1/3 ja 2/3 juures loovad kolm kuuppolünoom-splaini pidevusega C2. Kolmekordne sõlm intervalli mõlemas otsas tagab, et kõver interpoleerib lõpp-punkte
**Splain** on sile, ühesuguse struktuuriga tükiti polünomiaalne funktsioon, mis liitepunktides rahuldab teatud sileduse tingimusi. Interpolatsiooniprobleemides eelistatakse tihtipeale splain-interpolatsiooni polünomiaalsele interpolatsioonile, kuna see annab sarnaseid tulemusi, isegi kui kasutada madala astme polünoome.

Mõiste "splain" pärineb painduvatest spiraalsetest seadmetest, mida laevaehitajad jajoonestajad kasutavad siledate kujundite saamiseks.

Sissejuhatus
------------

Mõistet "splain" kasutatakse viitamiseks laiale funktsioonide klassile, mis tegeleb andmete interpoleerimise ja/või silumisega. Andmed võivad olla kas ühe- või mitmemõõtmelised. Splainidega lähendamine on tükiti interpoleerimine ühe ja sama astme polünoomiga.

Splain-funktsioonid on olemuselt piiratud mõõtmed, mis on peamine põhjus nende kasulikkuseks arvutustes ja esitustes. Ülejäänud artiklis on keskendutud täielikult ühemõõtmelistele, polünoomsetele splainidele ja kasutatud terminit "splain" selles piiratud tähenduses.

Definitsioon
------------

Lihtsaim splain on tükiti polünomiaalne funktsioon, kus igal polünoomil on üks muutuja. Splain {\displaystyle S} võtab väärtused vahemikust {\displaystyle \left[a,b\right]} ja määrab need {\displaystyle \mathbb {R} } reaalarvude hulka:

{\displaystyle S\colon [a,b]\rightarrow \mathbb {R} .}

Kuna {\displaystyle S} on tükiti määratletud, valime {\displaystyle k} lõiku vahemikus {\displaystyle \left[a,b\right]}: 

{\displaystyle [t\_{i},t\_{i+1}],i=0,...k-1}
{\displaystyle [a,b]=[t\_{0},t\_{1}]\cup [t\_{1},t\_{2}]\cup ...\cup [t\_{k-1},t\_{k-1}]\cup [t\_{k-1},t\_{k}]}
{\displaystyle a=t\_{0}\leq t\_{1}\leq ...\leq t\_{k-1}\leq t\_{k}=b}
Kõik need lõigud on seotud polünoomiga {\displaystyle P\_{i}},

{\displaystyle P\_{i}\colon [t\_{i},t\_{i+1}]\rightarrow \mathbb {R} }.
{\displaystyle i}*-*ndas lõigus vahemikus {\displaystyle \left[a,b\right]} on {\displaystyle S} määratletud {\displaystyle P\_{i}} abil,

{\displaystyle S(t)=P\_{0}(t),t\_{0}\leq t\leq t\_{1},}
{\displaystyle S(t)=P\_{1}(t),t\_{1}\leq t\leq t\_{2},}
{\displaystyle ...}
{\displaystyle S(t)=P\_{k-1}(t),t\_{k-1}\leq t\leq t\_{k}.}
Antud {\displaystyle k+1} punkti {\displaystyle t\_{j}(0\leq j\leq k)} nimetatakse **sõlmedeks**. Vektorit {\textstyle t=(t\_{0},...t\_{k})} nimetatakse splaini **sõlme vektoriks**.
Kui sõlmed on ühtlaselt jaotatud vahemikus {\displaystyle \left[a,b\right]} siis splaini nimetatakse **ühtlaseks**, vastasel juhul nimetatakse splaini **ebaühtlaseks**.

Kui {\displaystyle k}*-*nda polünoomi tükkidel {\displaystyle P\_{i}} on iga aste vähemalt {\displaystyle n}, siis splain on **astmega** {\displaystyle \leq n} (või {\displaystyle \leq n+1}).

Kui {\displaystyle 1\leq i\leq k-1\colon S\in C^{\tau \_{i}}} kehtib {\displaystyle k-1} punkti {\displaystyle t\_{i}}naabruses, siis on splain sile (vähemalt) {\displaystyle C^{\tau \_{i}}} kohal {\displaystyle t\_{i}}. See tähendab, et kohal {\displaystyle t\_{i}} jagavad {\displaystyle P\_{i-1}} ja {\displaystyle P\_{i}} ühist tuletisväärtust astmest {\displaystyle 0} (funktsiooni väärtusest) kuni astmeni {\displaystyle r\_{i}} (teisisõnu, kahe kõrvuti asetseva polünoomi tükki ühendavad kõige rohkem {\displaystyle n-r\_{i}} sileduse kaotust).

Vektorit {\displaystyle r=(r\_{1},...r\_{k-1})} kus splainil on siledus {\displaystyle C^{\tau \_{i}}} kohal  {\displaystyle t\_{i},i=1,...k-1} nimetatakse splaini **sileduse vektoriks**.

Näited
------

Oletame, et intervall {\displaystyle [a,b]} on {\displaystyle [0,3]} ja alamintervallid on{\displaystyle [0,1],[1,2],[2,3]}. Oletame, et polünoomi tükid peavad olema astmega {\displaystyle 2} ja tükid vahemikus {\displaystyle [0,1]} ja {\displaystyle [1,2]} peavad ühinema väärtuse ja esimese tuletisega ({\displaystyle t=1} korral) samal ajal kui tükid vahemikus {\displaystyle [1,2]} ja {\displaystyle [2,3]} ühinevad lihtsalt väärtusega ({\displaystyle t=2} korral). See määrab splaini {\displaystyle S(t)} tüübi, mille kohaselt

{\displaystyle S(t)=P\_{0}(t)=-1+4t-t^{2}{\mbox{ , }}0\leq t<1}
{\displaystyle S(t)=P\_{1}(t)=2t{\mbox{ , }}1\leq t<2}
{\displaystyle S(t)=P\_{2}(t)=2-t+t^{2}{\mbox{ , }}2\leq t\leq 3}
oleks selle tüübi liige ja ka

{\displaystyle S(t)=P\_{0}(t)=-2-2t^{2}{\mbox{ , }}0\leq t<1}
{\displaystyle S(t)=P\_{1}(t)=1-6t+t^{2}{\mbox{ , }}1\leq t<2}
{\displaystyle S(t)=P\_{2}(t)=-1+t-2t^{2}{\mbox{ , }}2\leq t\leq 3}
oleks selle tüübi liige. (Märkus: kuigi polünoomi tükk {\displaystyle 2t} ei ole ruutpolünoom, siis tulemust kutsutakse ikka ruutsplainiks. See näitab, et splaini astmeks on polünoom-osade maksimaalne aste.) Sellist tüüpi splaini pikendatud sõlme vektor oleks {\displaystyle (0,1,2,2,3)}.

Kõige lihtsam splain on astmega {\displaystyle 0}. Seda nimetatakse ka astmeliseks funktsiooniks. Järgmine kõige lihtsam splain on astmega {\displaystyle 1}. Seda kutsutakse ka **lineaarsplainiks**. Kinnine lineaarsplain (st esimene ja viimane sõlm langevad kokku) on lihtsalt hulknurk.

Tavaline splain on naturaalne {\displaystyle 3}. astme **kuupsplain**. Sõna "naturaalne" tähendab, et splaini polünoomi teine tuletis on interpoleerimise intervalli lõpp-punktides võrdne nulliga:

{\displaystyle S''(a)\,=S''(b)=0.}
### Algoritm kuupsplainide arvutamiseks

Kuupsplainid on kujul {\displaystyle {S}\_{j}\left(x\right)=a\_{j}+b\_{j}\left(x-x\_{j}\right)+c\_{j}{\left(x-x\_{j}\right)}^{2}+d\_{j}{\left(x-x\_{j}\right)}^{3}}.
Arvestades koordinaatide komplekti{\displaystyle C=\left[\left({x}\_{0},{y}\_{0}\right),\left({x}\_{1},{y}\_{1}\right),....\left({x}\_{n},{y}\_{n}\right)\right]} soovime leida hulga {\displaystyle n\,} splainiga {\displaystyle {S}\_{i}\left(x\right)}   {\displaystyle i=0,\ldots ,n-1.}

Need peavad rahuldama:

* {\displaystyle S\_{i}\left(x\_{i}\right)=y\_{i}=S\_{i-1}\left(x\_{i}\right),i=1,\ldots ,n-1.}
* {\displaystyle {S^{'}}\_{i}\left(x\_{i}\right)={S^{'}}\_{i-1}\left(x\_{i}\right),i=1,\ldots ,n-1.}
* {\displaystyle {S^{''}}\_{i}\left(x\_{i}\right)={S^{''}}\_{i-1}\left(x\_{i}\right),i=1,\ldots ,n-1.}
* {\displaystyle {S^{''}}\_{0}\left(x\_{0}\right)={S^{''}}\_{n-1}\left(x\_{n}\right)=0}.

Defineerime ühe kuupsplaini {\displaystyle S\,} 5-ennikuna {\displaystyle (a,b,c,d,x\_{t})\,} kus {\displaystyle a,b,c\,} ja {\displaystyle d\,} vastavad varem näidatud kujule ja {\displaystyle x\_{t}\,} on võrdne parameetriga {\displaystyle x\_{j}.\,}

**Algoritm kuupsplaini arvutamiseks:**
Sisend: koordinaatide hulk {\displaystyle C\,}, kus {\displaystyle \left|C\right|=n+1}
Väljund: splainide hulk, mis koosneb {\displaystyle n}-ist 5-ennikust. 

1. Loo uus massiiv {\displaystyle a} suurusega {\displaystyle n+1} ja iga {\displaystyle i=0,\ldots ,n} korral seadista {\displaystyle a\_{i}=y\_{i}\,}
2. Loo uued massiivid {\displaystyle b} ja {\displaystyle d} mõlemad suurusega {\displaystyle n}.
3. Loo uus massiiv {\displaystyle h} suurusega {\displaystyle n} ja iga {\displaystyle i=0,\ldots ,n-1} seadista {\displaystyle h\_{i}=x\_{i+1}-x\_{i}\,}
4. Loo uus massiiv {\displaystyle \alpha }suurusega {\displaystyle n} ja iga {\displaystyle i=0,\ldots ,n-1} seadista {\displaystyle {\alpha }\_{i}={\frac {3}{{h}\_{i}}}\left({a}\_{i+1}-{a}\_{i}\right)-{\frac {3}{{h}\_{i-1}}}\left({a}\_{i}-{a}\_{i-1}\right)}.
5. Loo uued massiivid {\displaystyle nc,l,\mu } ja {\displaystyle z} kõik suurusega {\displaystyle n+1\,}.
6. Seadista {\displaystyle l\_{0}=1,{\mu }\_{0}=z\_{0}=0\,}
7. Iga {\displaystyle i=1,\ldots ,n-1\,}
	1. {\displaystyle {l}\_{i}=2\left({x}\_{i+1}-{x}\_{i-1}\right)-{h}\_{i-1}{\mu }\_{i-1}}.
	2. {\displaystyle {\mu }\_{i}={\frac {{h}\_{i}}{{l}\_{i}}}}.
	3. {\displaystyle {z}\_{i}={\frac {{\alpha }\_{i}-{h}\_{i-1}{z}\_{i-1}}{{l}\_{i}}}}.
8. Seadista {\displaystyle l\_{n}=1;z\_{n}=c\_{n}=0.\,}
9. {\displaystyle j=n-1,n-2,\ldots ,0}
	1. {\displaystyle c\_{j}=z\_{j}-{\mu }\_{j}c\_{j+1}\,}
	2. {\displaystyle b\_{j}={\frac {{a}\_{j+1}-{a}\_{j}}{{h}\_{j}}}-{\frac {{h}\_{j}\left({c}\_{j+1}+2{c}\_{j}\right)}{3}}}
	3. {\displaystyle d\_{j}={\frac {{c}\_{j+1}-{c}\_{j}}{3{h}\_{j}}}}
10. Loo uus splainide komplekt ja nimeta see valjund\_komplekt. Paiguta sinna {\displaystyle n} splaini {\displaystyle S}.
11. Iga {\displaystyle i=0,\ldots ,n-1}
	1. {\displaystyle S\_{i,a}=a\_{i}}
	2. {\displaystyle S\_{i,b}=b\_{i}}
	3. {\displaystyle S\_{i,c}=c\_{i}}
	4. {\displaystyle S\_{i,d}=d\_{i}}
	5. {\displaystyle S\_{i,x}=x\_{i}}
12. Väljund valjund\_komplekt

Viited
------

1. 1 2 3  Schoenberg, Isaac J. (1946). "Contributions to the Problem of Approximation of Equidistant Data by Analytic Functions: Part A.—On the Problem of Smoothing or Graduation. A First Class of Analytic Approximation Formulae" (PDF). *Quarterly of Applied Mathematics*. **4** (2): 45–99.
2. ↑  Wegman, Edward J. and Ian W. Wright (1983). "Splines in statistics". *Journal of the American Statistical Association*. **78** (382): 351–365.`{{cite journal}}`: CS1 hooldus: mitu nime: autorite loend (link)
3. ↑  Marek Kolk (2012). "Splain-Kollokatsioonimeetod" (PDF). *Tartu Ülikool*.
4. ↑  Tõnu Tõnso. "Splainid" (PDF). *Tallinna Ülikool*.
5. ↑  Helle Trossmann (2004). "Ruut- ja kuupsplainidega interpoleerimine" (PDF). *Tartu Ülikool*.

Välislingid
-----------

**Teooria**

* Kuuplsplain moodul Prof. John H. Mathews California State University, Fullerton
* Interaktiivne sissejuhatus splainidesse, ibiblio.org

**Exceli funktsioon**

* XLL Excel Addin Funktsioon kuupsplaini rakendamiseks

**Võrguteenuste pakkujad**

* Online kuupsplain-interpolatsiooni keskkond
* Õppimine simulatsioonide abil Erinevate kuupsplainide interaktiivne simulatsioon
* Sümmeetrilised splaini kõverad, Theodore Gray animatsioon, The Wolfram Demonstrations Project, 2007.
* Bezieri ja Splaini Kõverate uurimine, interaktiivne veebirakendus

**Arvutikood**

* Notes, PPT, Mathcad, Maple, Mathematica, Matlab, *Holistic Numerical Methods Institute*
* mitmesugused rutiinid, NTCC
* Sisl: Opensource C-library for NURBS, SINTEF
* VBA splain-interpolatsioon, vbnumericalmethods.com