Splain

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. 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. Lihtsaim splain on tükiti polünomiaalne funktsioon, kus igal polünoomil on üks muutuja. Splain  S {\displaystyle S} võtab väärtused vahemikust [ a , b ] {\displaystyle \left[a,b\right]} ja määrab need R {\displaystyle \mathbb {R} } reaalarvude hulka: S : [ a , b ] → R . {\displaystyle S\colon [a,b]\rightarrow \mathbb {R} .} Kuna S {\displaystyle S} on tükiti määratletud, valime  k {\displaystyle k} lõiku vahemikus [ a , b ] {\displaystyle \left[a,b\right]} : [ t i , t i + 1 ] , i = 0 , . . . , k − 1 {\displaystyle [t_{i},t_{i+1}],i=0,...,k-1} [ a , b ] = [ t 0 , t 1 ] ∪ [ t 1 , t 2 ] ∪ . . . ∪ [ t k − 1 , t k − 1 ] ∪ [ t k − 1 , t k ] {\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}]} a = t 0 ≤ t 1 ≤ . . . ≤ t k − 1 ≤ t k = b {\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  P i {\displaystyle P_{i}} , P i : [ t i , t i + 1 ] → R {\displaystyle P_{i}\colon [t_{i},t_{i+1}]\rightarrow \mathbb {R} } . i {\displaystyle i} -ndas lõigus vahemikus [ a , b ] {\displaystyle \left[a,b\right]} on  S {\displaystyle S}  määratletud P i {\displaystyle P_{i}}  abil, S ( t ) = P 0 ( t ) , t 0 ≤ t ≤ t 1 , {\displaystyle S(t)=P_{0}(t),t_{0}\leq t\leq t_{1},} S ( t ) = P 1 ( t ) , t 1 ≤ t ≤ t 2 , {\displaystyle S(t)=P_{1}(t),t_{1}\leq t\leq t_{2},} . . . {\displaystyle ...} S ( t ) = P k − 1 ( t ) , t k − 1 ≤ t ≤ t k . {\displaystyle S(t)=P_{k-1}(t),t_{k-1}\leq t\leq t_{k}.} Antud k + 1 {\displaystyle k+1} punkti  t j ( 0 ≤ j ≤ k ) {\displaystyle t_{j}(0\leq j\leq k)} nimetatakse sõlmedeks. Vektorit  t = ( t 0 , . . . , t k ) {\textstyle t=(t_{0},...,t_{k})} nimetatakse splaini sõlme vektoriks. Kui sõlmed on ühtlaselt jaotatud vahemikus [ a , b ] {\displaystyle \left[a,b\right]} siis splaini nimetatakse ühtlaseks, vastasel juhul nimetatakse splaini ebaühtlaseks. Kui k {\displaystyle k} -nda polünoomi tükkidel  P i {\displaystyle P_{i}}  on iga aste vähemalt  n {\displaystyle n} , siis splain on astmega  ≤ n {\displaystyle \leq n} (või  ≤ n + 1 {\displaystyle \leq n+1} ). Kui 1 ≤ i ≤ k − 1 : S ∈ C τ i {\displaystyle 1\leq i\leq k-1\colon S\in C^{\tau _{i}}}  kehtib k − 1 {\displaystyle k-1} punkti t i {\displaystyle t_{i}}  naabruses, siis on splain sile (vähemalt) C τ i {\displaystyle C^{\tau _{i}}}  kohal  t i {\displaystyle t_{i}} . See tähendab, et kohal t i {\displaystyle t_{i}} jagavad P i − 1 {\displaystyle P_{i-1}} ja P i {\displaystyle P_{i}}  ühist tuletisväärtust astmest 0 {\displaystyle 0} (funktsiooni väärtusest) kuni astmeni  r i {\displaystyle r_{i}} (teisisõnu, kahe kõrvuti asetseva polünoomi tükki ühendavad kõige rohkem n − r i {\displaystyle n-r_{i}} sileduse kaotust). Vektorit  r = ( r 1 , . . . , r k − 1 ) {\displaystyle r=(r_{1},...,r_{k-1})} kus splainil on siledus  C τ i {\displaystyle C^{\tau _{i}}}  kohal   t i , i = 1 , . . . , k − 1 {\displaystyle t_{i},i=1,...,k-1} nimetatakse splaini sileduse vektoriks. Oletame, et intervall [ a , b ] {\displaystyle [a,b]} on [ 0 , 3 ] {\displaystyle [0,3]} ja alamintervallid on [ 0 , 1 ] , [ 1 , 2 ] , [ 2 , 3 ] {\displaystyle [0,1],[1,2],[2,3]} . Oletame, et polünoomi tükid peavad olema astmega 2 {\displaystyle 2} ja tükid vahemikus [ 0 , 1 ] {\displaystyle [0,1]} ja [ 1 , 2 ] {\displaystyle [1,2]} peavad ühinema väärtuse ja esimese tuletisega ( t = 1 {\displaystyle t=1} korral) samal ajal kui tükid vahemikus [ 1 , 2 ] {\displaystyle [1,2]} ja [ 2 , 3 ] {\displaystyle [2,3]} ühinevad lihtsalt väärtusega ( t = 2 {\displaystyle t=2} korral). See määrab splaini S ( t ) {\displaystyle S(t)} tüübi, mille kohaselt S ( t ) = P 0 ( t ) = − 1 + 4 t − t 2  ,  0 ≤ t < 1 {\displaystyle S(t)=P_{0}(t)=-1+4t-t^{2}{\mbox{ , }}0\leq t<1} S ( t ) = P 1 ( t ) = 2 t  ,  1 ≤ t < 2 {\displaystyle S(t)=P_{1}(t)=2t{\mbox{ , }}1\leq t<2} S ( t ) = P 2 ( t ) = 2 − t + t 2  ,  2 ≤ t ≤ 3 {\displaystyle S(t)=P_{2}(t)=2-t+t^{2}{\mbox{ , }}2\leq t\leq 3} oleks selle tüübi liige ja ka S ( t ) = P 0 ( t ) = − 2 − 2 t 2  ,  0 ≤ t < 1 {\displaystyle S(t)=P_{0}(t)=-2-2t^{2}{\mbox{ , }}0\leq t<1} S ( t ) = P 1 ( t ) = 1 − 6 t + t 2  ,  1 ≤ t < 2 {\displaystyle S(t)=P_{1}(t)=1-6t+t^{2}{\mbox{ , }}1\leq t<2} S ( t ) = P 2 ( t ) = − 1 + t − 2 t 2  ,  2 ≤ t ≤ 3 {\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 2 t {\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 ( 0 , 1 , 2 , 2 , 3 ) {\displaystyle (0,1,2,2,3)} . Kõige lihtsam splain on astmega 0 {\displaystyle 0} . Seda nimetatakse ka astmeliseks funktsiooniks. Järgmine kõige lihtsam splain on astmega 1 {\displaystyle 1} . Seda kutsutakse ka lineaarsplainiks. Kinnine lineaarsplain (st esimene ja viimane sõlm langevad kokku) on lihtsalt hulknurk. Tavaline splain on naturaalne 3 {\displaystyle 3} . astme kuupsplain. Sõna "naturaalne" tähendab, et splaini polünoomi teine tuletis on interpoleerimise intervalli lõpp-punktides võrdne nulliga: S ″ ( a ) = S ″ ( b ) = 0. {\displaystyle S''(a)\,=S''(b)=0.} Kuupsplainid on kujul  S j ( x ) = a j + b j ( x − x j ) + c j ( x − x j ) 2 + d j ( x − x j ) 3 {\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 C = [ ( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . . , ( x n , y n ) ] {\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  n {\displaystyle n\,} splainiga  S i ( x ) {\displaystyle {S}_{i}\left(x\right)}     i = 0 , … , n − 1. {\displaystyle i=0,\ldots ,n-1.} Need peavad rahuldama: S i ( x i ) = y i = S i − 1 ( x i ) , i = 1 , … , n − 1. {\displaystyle S_{i}\left(x_{i}\right)=y_{i}=S_{i-1}\left(x_{i}\right),i=1,\ldots ,n-1.} S ′ i ( x i ) = S ′ i − 1 ( x i ) , i = 1 , … , n − 1. {\displaystyle {S^{'}}_{i}\left(x_{i}\right)={S^{'}}_{i-1}\left(x_{i}\right),i=1,\ldots ,n-1.} S ″ i ( x i ) = S ″ i − 1 ( x i ) , i = 1 , … , n − 1. {\displaystyle {S^{''}}_{i}\left(x_{i}\right)={S^{''}}_{i-1}\left(x_{i}\right),i=1,\ldots ,n-1.} S ″ 0 ( x 0 ) = S ″ n − 1 ( x n ) = 0 {\displaystyle {S^{''}}_{0}\left(x_{0}\right)={S^{''}}_{n-1}\left(x_{n}\right)=0} . Defineerime ühe kuupsplaini  S {\displaystyle S\,} 5-ennikuna ( a , b , c , d , x t ) {\displaystyle (a,b,c,d,x_{t})\,}  kus  a , b , c {\displaystyle a,b,c\,}  ja  d {\displaystyle d\,} vastavad varem näidatud kujule ja  x t {\displaystyle x_{t}\,} on võrdne parameetriga  x j . {\displaystyle x_{j}.\,} Algoritm kuupsplaini arvutamiseks: Sisend: koordinaatide hulk  C {\displaystyle C\,} , kus  | C | = n + 1 {\displaystyle \left|C\right|=n+1} Väljund: splainide hulk, mis koosneb n {\displaystyle n} -ist 5-ennikust.  Loo uus massiiv  a {\displaystyle a} suurusega  n + 1 {\displaystyle n+1}  ja iga  i = 0 , … , n {\displaystyle i=0,\ldots ,n} korral seadista  a i = y i {\displaystyle a_{i}=y_{i}\,} Loo uued massiivid  b {\displaystyle b}  ja  d {\displaystyle d}  mõlemad suurusega  n {\displaystyle n} . Loo uus massiiv  h {\displaystyle h} suurusega  n {\displaystyle n} ja iga i = 0 , … , n − 1 {\displaystyle i=0,\ldots ,n-1} seadista h i = x i + 1 − x i {\displaystyle h_{i}=x_{i+1}-x_{i}\,} Loo uus massiiv α {\displaystyle \alpha } suurusega  n {\displaystyle n} ja iga i = 0 , … , n − 1 {\displaystyle i=0,\ldots ,n-1}  seadista α i = 3 h i ( a i + 1 − a i ) − 3 h i − 1 ( a i − a i − 1 ) {\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)} . Loo uued massiivid  n c , l , μ {\displaystyle nc,l,\mu } ja  z {\displaystyle z}  kõik suurusega  n + 1 {\displaystyle n+1\,} . Seadista  l 0 = 1 , μ 0 = z 0 = 0 {\displaystyle l_{0}=1,{\mu }_{0}=z_{0}=0\,} Iga  i = 1 , … , n − 1 {\displaystyle i=1,\ldots ,n-1\,} l i = 2 ( x i + 1 − x i − 1 ) − h i − 1 μ i − 1 {\displaystyle {l}_{i}=2\left({x}_{i+1}-{x}_{i-1}\right)-{h}_{i-1}{\mu }_{i-1}} .   μ i = h i l i {\displaystyle {\mu }_{i}={\frac {{h}_{i}}{{l}_{i}}}} . z i = α i − h i − 1 z i − 1 l i {\displaystyle {z}_{i}={\frac {{\alpha }_{i}-{h}_{i-1}{z}_{i-1}}{{l}_{i}}}} . Seadista  l n = 1 ; z n = c n = 0. {\displaystyle l_{n}=1;z_{n}=c_{n}=0.\,}   j = n − 1 , n − 2 , … , 0 {\displaystyle j=n-1,n-2,\ldots ,0} c j = z j − μ j c j + 1 {\displaystyle c_{j}=z_{j}-{\mu }_{j}c_{j+1}\,} b j = a j + 1 − a j h j − h j ( c j + 1 + 2 c j ) 3 {\displaystyle b_{j}={\frac {{a}_{j+1}-{a}_{j}}{{h}_{j}}}-{\frac {{h}_{j}\left({c}_{j+1}+2{c}_{j}\right)}{3}}} d j = c j + 1 − c j 3 h j {\displaystyle d_{j}={\frac {{c}_{j+1}-{c}_{j}}{3{h}_{j}}}} Loo uus splainide komplekt ja nimeta see valjund_komplekt. Paiguta sinna n {\displaystyle n} splaini  S {\displaystyle S} . Iga  i = 0 , … , n − 1 {\displaystyle i=0,\ldots ,n-1} S i , a = a i {\displaystyle S_{i,a}=a_{i}} S i , b = b i {\displaystyle S_{i,b}=b_{i}} S i , c = c i {\displaystyle S_{i,c}=c_{i}} S i , d = d i {\displaystyle S_{i,d}=d_{i}} S i , x = x i {\displaystyle S_{i,x}=x_{i}} Väljund valjund_komplekt 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. 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) Marek Kolk (2012). "Splain-Kollokatsioonimeetod" (PDF). Tartu Ülikool. Tõnu Tõnso. "Splainid" (PDF). Tallinna Ülikool. Helle Trossmann (2004). "Ruut- ja kuupsplainidega interpoleerimine" (PDF). Tartu Ülikool. Originaali (PDF) arhiivikoopia seisuga 18. aprill 2018. 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