# Interpolació per splines

En el camp matemàtic de l'anàlisi numèrica la interpolació per splines és una forma d'interpolació on l'interpolant és un tipus especial de funció polinòmica definida a trossos anomenada un spline. La interpolació per splines es prefereix sobre la interpolació polinòmica perquè l'error d'interpolació es pot fer petit fins i tot en utilitzar polinomis de graus baixos per l'spline. La interpolació per splines evita el problema del fenomen de Runge que ocorre en interpolar entre punts equidistants amb polinomis de graus alts.

## Introducció

Els regles elàstics que es doblegaven per passar a través d'un cert nombre de punts predefinits (els "nodes") s'utilitzaven per a dibuixos tècnics a mà per a la construcció naval, com s'il·lustra a la figura 1.
L'enfocament per imitar matemàticament la forma de tals regles elàstics fixats a n+1 "nodes" $(x_{i},y_{i})\quad i=0,1,\cdots ,n$ és interpolar entre tot parell de "nodes" $(x_{i-1}\,\ y_{i-1})$ i $(x_{i}\,\ y_{i})$ amb polinomis $y=q_{i}(x)\quad i=1,2,\cdots ,n$
La curvatura d'una corba
    $y=f(x)$
és
Com que el regle elàstic prendrà una forma que minimitza l'energia de flexió elàstica sota la restricció de passar a través de tots els "nodes" tant $y'$ com $y''$ seran continus a tot arreu, també als "nodes". Per aconseguir-ho s'ha de complir que
    $q'_{i}(x_{i})=q'_{i+1}(x_{i})$
i que
    $q''_{i}(x_{i})=q''_{i+1}(x_{i})$
per a tot i, $1\leq i\leq n-1$. Això només es pot aconseguir si es fan servir polinomis del grau 3 o més alt. L'aproximació clàssica és de fer servir polinomis del grau 3, aquest és el cas dels "splines cúbics".

## Algorisme per trobar que l'spline cúbic d'interpolació

Un polinomi de tercer ordre $q(x)$ per al qual
    $q(x_{1})=y_{1}$
    $q(x_{2})=y_{2}$
    $q^{'}(x_{1})=k_{1}$
    $q^{'}(x_{2})=k_{2}$
es pot escriure de forma simètrica
| $q\ =\ (1-t)\ y_{1}+\ t\ y_{2}\ +\ t\ (1-t)\ (a\ (1-t)+b\ t)$ | (1) |
on
| $t={\frac {x-x_{1}}{x_{2}-x_{1}}}$ | (2) |
i
| $a=k_{1}(x_{2}-x_{1})-(y_{2}-y_{1})$ | (3) |
| $b=-k_{2}(x_{2}-x_{1})+(y_{2}-y_{1})$ | (4) |
Com que $q^{'}={\frac {dq}{dx}}={\frac {dq}{dt}}\ {\frac {dt}{dx}}={\frac {dq}{dt}}\ alqual{\frac {1}{x_{2}-x_{1}}}$ resulta que
| $q^{'}\ ={\frac {y_{2}-y_{1}}{x_{2}-x_{1}}}+(1-2t)\ {\frac {a\ (1-t)+b\ t}{x_{2}-x_{1}}}\ +\ \ t\ (1-t)\ {\frac {b-a}{x_{2}-x_{1}}}$ | (5) |
| $q^{''}=2{\frac {b-2a+(a-b)3t}{{(x_{2}-x_{1})}^{2}}}$ | (6) |
Posant $x=x_{1}$ i $x=x_{2}$ a (5) i (6) s'obté de (2) que en efecte $q^{'}(x_{1})=k_{1}$, $q^{'}(x_{2})=k_{2}$ i que
| $q^{''}(x_{1})=2{\frac {b-2a}{{(x_{2}-x_{1})}^{2}}}$ | (7) |
| $q^{''}(x_{2})=2{\frac {a-2b}{{(x_{2}-x_{1})}^{2}}}$ | (8) |
Si ara
    $(x_{i},y_{i})\quad i=0,1,\cdots ,n$
són els n+1 punts i
| $q_{i}\ =\ (1-t)\ y_{i-1}+\ t\ y_{i}\ +\ t\ (1-t)\ (a_{i}\ (1-t)+b_{i}\ t)\quad i=1,\cdots ,n$ | (9) |
on
    $t={\frac {x-x_{i-1}}{x_{i}-x_{i-1}}}$
són n polinomis de tercer grau que interpolen $y$ en l'interval $x_{i-1}\leq x<x_{i}\leq$ per a $i=1,\cdots ,n$ tal que
    $q_{i}^{'}(x_{i})=q_{i+1}^{'}(x_{i})$
per a $i=1,\cdots ,n-1$
llavors els n polinomis junts defineixen una funció derivable a l'interval $x_{0}\leq x\leq x_{n}$ i
| $a_{i}=k_{i-1}(x_{i}-x_{i-1})-(y_{i}-y_{i-1})$ | (10) |
| $b_{i}=-k_{i}(x_{i}-x_{i-1})+(y_{i}-y_{i-1})$ | (11) |
per a $i=1,\cdots ,n$ on
| $k_{0}=q_{1}^{'}(x_{0})$ | (12) |
| $k_{i}=q_{i}^{'}(x_{i})=q_{i+1}^{'}(x_{i})\quad i=1,\cdots ,n-1$ | (13) |
| $k_{n}=q_{n}^{'}(x_{n})$ | (14) |
Si la successió $k_{0},k_{1},\cdots ,k_{n}$ és tal que a més a més
    $q_{i}^{''}(x_{i})=q_{i+1}^{''}(x_{i})$
per a $i=1,\cdots ,n-1$
la funció que resulta tindrà fins i tot una segona derivada contínua.
De (7), (8), (10) i (11) se segueix que aquest és el cas si i només si
| ${\frac {k_{i-1}}{x_{i}-x_{i-1}}}+\left({\frac {1}{x_{i}-x_{i-1}}}+{\frac {1}{x_{i+1}-x_{i}}}\right)\ 2k_{i}+{\frac {k_{i+1}}{x_{i+1}-x_{i}}}=3\ \left({\frac {y_{i}-y_{i-1}}{{(x_{i}-x_{i-1})}^{2}}}+{\frac {y_{i+1}-y_{i}}{{(x_{i+1}-x_{i})}^{2}}}\right)$ | (15) |
per a $i=1,\cdots ,n-1$
Les relacions (15) són n-1 equacions lineals per als n+1 valors de $k_{0},k_{1},\cdots ,k_{n}$.
Per als regles elàstics que són el model per la interpolació per splines cal observar que a l'esquerra del primer node i a la dreta del últim el regle es pot moure lliurement i, per tant, prendrà la forma d'una recta amb $q''=0$. Com que $q''$ ha de ser una funció contínua de $x$ es té que per als "Splines naturals" a més a més de les n-1 equacions lineals (15) s'ha d'imposar que
    $q_{i}^{''}(x_{0})\ =2\ {\frac {3(y_{1}-y_{0})-(k_{1}+2k_{0})(x_{1}-x_{0})}{{(x_{1}-x_{0})}^{2}}}=0$
    $q_{n}^{''}(x_{n})\ =-2\ {\frac {3(y_{n}-y_{n-1})-(2k_{n}+k_{n-1})(x_{n}-x_{n-1})}{{(x_{n}-x_{n-1})}^{2}}}=0$
és a dir que
| ${\frac {2}{x_{1}-x_{0}}}k_{0}\ +{\frac {1}{x_{1}-x_{0}}}k_{1}=3\ {\frac {y_{1}-y_{0}}{(x_{1}-x_{0})^{2}}}$ | (16) |
| ${\frac {1}{x_{n}-x_{n-1}}}k_{n-1}\ +{\frac {2}{x_{n}-x_{n-1}}}k_{n}=3\ {\frac {y_{n}-y_{n-1}}{(x_{n}-x_{n-1})^{2}}}$ | (17) |
(15) juntament amb (16) i (17) constitueixen n+1 equacions lineals que defineixen de forma única els n+1 paràmetres de $k_{0},k_{1},\cdots ,k_{n}$

## Exemple

En el cas de tres punts els valors per a $k_{0},k_{1},k_{2}$ es troben resolent el sistema d'equacions lineals
    ${\begin{bmatrix}a_{11}&a_{12}&0\\a_{21}&a_{22}&a_{23}\\0&a_{32}&a_{33}\\\end{bmatrix}}{\begin{bmatrix}k_{0}\\k_{1}\\k_{2}\\\end{bmatrix}}={\begin{bmatrix}b_{1}\\b_{2}\\b_{3}\\\end{bmatrix}}$
amb
    $a_{11}={\frac {2}{x_{1}-x_{0}}}$
    $a_{12}={\frac {1}{x_{1}-x_{0}}}$
    $a_{21}={\frac {1}{x_{1}-x_{0}}}$
    $a_{22}=2\ \left({\frac {1}{x_{1}-x_{0}}}+{\frac {1}{x_{2}-x_{1}}}\right)$
    $a_{23}={\frac {1}{x_{2}-x_{1}}}$
    $a_{32}={\frac {1}{x_{2}-x_{1}}}$
    $a_{33}={\frac {2}{x_{2}-x_{1}}}$
    $b_{1}=3\ {\frac {y_{1}-y_{0}}{(x_{1}-x_{0})^{2}}}$
    $b_{2}=3\ \left({\frac {y_{1}-y_{0}}{{(x_{1}-x_{0})}^{2}}}+{\frac {y_{2}-y_{1}}{{(x_{2}-x_{1})}^{2}}}\right)$
    $b_{3}=3\ {\frac {y_{2}-y_{1}}{(x_{2}-x_{1})^{2}}}$
Per als tres punts
    $(-1,0.5)\ ,\ (0,0)\ ,\ (3,3)$
s'obté que
    $k_{0}=-0.6875\ ,\ k_{1}=-0.1250\ ,\ k_{2}=1.5625$
i de (10) i (11) que
    $a_{1}=k_{0}(x_{1}-x_{0})-(y_{1}-y_{0})=-0.1875$
    $b_{1}=-k_{1}(x_{1}-x_{0})+(y_{1}-y_{0})=-0.3750$
    $a_{2}=k_{1}(x_{2}-x_{1})-(y_{2}-y_{1})=-3.3750$
    $b_{2}=-k_{2}(x_{2}-x_{1})+(y_{2}-y_{1})=-1.6875$
A la figura 2 es mostra la funció spline que consta dels dos polinomis cúbics $q_{1}(x)$ i $q_{2}(x)$ donats a per (9)

## Vegeu també

* NURBS

## Enllaços externs

* Dynamic cubic splines with JSXGraph
* Lectures on the theory and practice of spline interpolation
* article que explica pas a pas, com es fa la interpolació amb splines cúbics.
* Eina en Línia per la interpolació amb splines cúbics
* Numerical Recipes in C Arxivat 2012-11-12 a Wayback Machine., Aneu al Capítol 3 Secció 3-3.