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.

Figura 1: Interpolació amb splines cúbics entre vuit punts. Els dibuixos tècnics dibuixats de mà es feien per construcció de vaixells etc. utilitzant regles flexibles que es doblegaven per seguir punts predefinits (els "nodes")

L'enfocament per imitar matemàticament la forma de tals regles elàstics fixats a n+1 "nodes" ( x i , y i ) i = 0 , 1 , , n {\displaystyle (x_{i},y_{i})\quad i=0,1,\cdots ,n} és interpolar entre tot parell de "nodes" ( x i 1   y i 1 ) {\displaystyle (x_{i-1}\,\ y_{i-1})} i ( x i   y i ) {\displaystyle (x_{i}\,\ y_{i})} amb polinomis y = q i ( x ) i = 1 , 2 , , n {\displaystyle y=q_{i}(x)\quad i=1,2,\cdots ,n}

La curvatura d'una corba

y = f ( x ) {\displaystyle 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 {\displaystyle y'} com y {\displaystyle 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 ) {\displaystyle q'_{i}(x_{i})=q'_{i+1}(x_{i})}

i que

q i ( x i ) = q i + 1 ( x i ) {\displaystyle q''_{i}(x_{i})=q''_{i+1}(x_{i})}

per a tot i, 1 i n 1 {\displaystyle 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 ) {\displaystyle q(x)} per al qual

q ( x 1 ) = y 1 {\displaystyle q(x_{1})=y_{1}}
q ( x 2 ) = y 2 {\displaystyle q(x_{2})=y_{2}}
q ( x 1 ) = k 1 {\displaystyle q^{'}(x_{1})=k_{1}}
q ( x 2 ) = k 2 {\displaystyle 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 ) {\displaystyle q\ =\ (1-t)\ y_{1}+\ t\ y_{2}\ +\ t\ (1-t)\ (a\ (1-t)+b\ t)}

 

 

 

 

(1)

on

t = x x 1 x 2 x 1 {\displaystyle t={\frac {x-x_{1}}{x_{2}-x_{1}}}}

 

 

 

 

(2)

i

a = k 1 ( x 2 x 1 ) ( y 2 y 1 ) {\displaystyle a=k_{1}(x_{2}-x_{1})-(y_{2}-y_{1})}

 

 

 

 

(3)

b = k 2 ( x 2 x 1 ) + ( y 2 y 1 ) {\displaystyle b=-k_{2}(x_{2}-x_{1})+(y_{2}-y_{1})}

 

 

 

 

(4)

Com que q = d q d x = d q d t   d t d x = d q d t   a l q u a l 1 x 2 x 1 {\displaystyle q^{'}={\frac {dq}{dx}}={\frac {dq}{dt}}\ {\frac {dt}{dx}}={\frac {dq}{dt}}\ alqual{\frac {1}{x_{2}-x_{1}}}} resulta que

q   = y 2 y 1 x 2 x 1 + ( 1 2 t )   a   ( 1 t ) + b   t x 2 x 1   +     t   ( 1 t )   b a x 2 x 1 {\displaystyle 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 b 2 a + ( a b ) 3 t ( x 2 x 1 ) 2 {\displaystyle q^{''}=2{\frac {b-2a+(a-b)3t}{{(x_{2}-x_{1})}^{2}}}}

 

 

 

 

(6)

Posant x = x 1 {\displaystyle x=x_{1}} i x = x 2 {\displaystyle x=x_{2}} a (5) i (6) s'obté de (2) que en efecte q ( x 1 ) = k 1 {\displaystyle q^{'}(x_{1})=k_{1}} , q ( x 2 ) = k 2 {\displaystyle q^{'}(x_{2})=k_{2}} i que

q ( x 1 ) = 2 b 2 a ( x 2 x 1 ) 2 {\displaystyle q^{''}(x_{1})=2{\frac {b-2a}{{(x_{2}-x_{1})}^{2}}}}

 

 

 

 

(7)

q ( x 2 ) = 2 a 2 b ( x 2 x 1 ) 2 {\displaystyle q^{''}(x_{2})=2{\frac {a-2b}{{(x_{2}-x_{1})}^{2}}}}

 

 

 

 

(8)

Si ara

( x i , y i ) i = 0 , 1 , , n {\displaystyle (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 ) i = 1 , , n {\displaystyle 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 = x x i 1 x i x i 1 {\displaystyle t={\frac {x-x_{i-1}}{x_{i}-x_{i-1}}}}

són n polinomis de tercer grau que interpolen y {\displaystyle y} en l'interval x i 1 x < x i {\displaystyle x_{i-1}\leq x<x_{i}\leq } per a i = 1 , , n {\displaystyle i=1,\cdots ,n} tal que

q i ( x i ) = q i + 1 ( x i ) {\displaystyle q_{i}^{'}(x_{i})=q_{i+1}^{'}(x_{i})}

per a i = 1 , , n 1 {\displaystyle i=1,\cdots ,n-1}

llavors els n polinomis junts defineixen una funció derivable a l'interval x 0 x x n {\displaystyle x_{0}\leq x\leq x_{n}} i

a i = k i 1 ( x i x i 1 ) ( y i y i 1 ) {\displaystyle 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 ) {\displaystyle b_{i}=-k_{i}(x_{i}-x_{i-1})+(y_{i}-y_{i-1})}

 

 

 

 

(11)

per a i = 1 , , n {\displaystyle i=1,\cdots ,n} on

k 0 = q 1 ( x 0 ) {\displaystyle k_{0}=q_{1}^{'}(x_{0})}

 

 

 

 

(12)

k i = q i ( x i ) = q i + 1 ( x i ) i = 1 , , n 1 {\displaystyle k_{i}=q_{i}^{'}(x_{i})=q_{i+1}^{'}(x_{i})\quad i=1,\cdots ,n-1}

 

 

 

 

(13)

k n = q n ( x n ) {\displaystyle k_{n}=q_{n}^{'}(x_{n})}

 

 

 

 

(14)

Si la successió k 0 , k 1 , , k n {\displaystyle 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 ) {\displaystyle q_{i}^{''}(x_{i})=q_{i+1}^{''}(x_{i})}

per a i = 1 , , n 1 {\displaystyle 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

k i 1 x i x i 1 + ( 1 x i x i 1 + 1 x i + 1 x i )   2 k i + k i + 1 x i + 1 x i = 3   ( y i y i 1 ( x i x i 1 ) 2 + y i + 1 y i ( x i + 1 x i ) 2 ) {\displaystyle {\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 , , n 1 {\displaystyle i=1,\cdots ,n-1}

Les relacions (15) són n-1 equacions lineals per als n+1 valors de k 0 , k 1 , , k n {\displaystyle 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 {\displaystyle q''=0} . Com que q {\displaystyle q''} ha de ser una funció contínua de x {\displaystyle 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   3 ( y 1 y 0 ) ( k 1 + 2 k 0 ) ( x 1 x 0 ) ( x 1 x 0 ) 2 = 0 {\displaystyle 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   3 ( y n y n 1 ) ( 2 k n + k n 1 ) ( x n x n 1 ) ( x n x n 1 ) 2 = 0 {\displaystyle 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

2 x 1 x 0 k 0   + 1 x 1 x 0 k 1 = 3   y 1 y 0 ( x 1 x 0 ) 2 {\displaystyle {\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)

1 x n x n 1 k n 1   + 2 x n x n 1 k n = 3   y n y n 1 ( x n x n 1 ) 2 {\displaystyle {\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 , , k n {\displaystyle k_{0},k_{1},\cdots ,k_{n}}

Exemple

Figura 2: Interpolació amb splines cúbics "naturals entre tres punts.

En el cas de tres punts els valors per a k 0 , k 1 , k 2 {\displaystyle k_{0},k_{1},k_{2}} es troben resolent el sistema d'equacions lineals

[ a 11 a 12 0 a 21 a 22 a 23 0 a 32 a 33 ] [ k 0 k 1 k 2 ] = [ b 1 b 2 b 3 ] {\displaystyle {\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 = 2 x 1 x 0 {\displaystyle a_{11}={\frac {2}{x_{1}-x_{0}}}}
a 12 = 1 x 1 x 0 {\displaystyle a_{12}={\frac {1}{x_{1}-x_{0}}}}
a 21 = 1 x 1 x 0 {\displaystyle a_{21}={\frac {1}{x_{1}-x_{0}}}}
a 22 = 2   ( 1 x 1 x 0 + 1 x 2 x 1 ) {\displaystyle a_{22}=2\ \left({\frac {1}{x_{1}-x_{0}}}+{\frac {1}{x_{2}-x_{1}}}\right)}
a 23 = 1 x 2 x 1 {\displaystyle a_{23}={\frac {1}{x_{2}-x_{1}}}}
a 32 = 1 x 2 x 1 {\displaystyle a_{32}={\frac {1}{x_{2}-x_{1}}}}
a 33 = 2 x 2 x 1 {\displaystyle a_{33}={\frac {2}{x_{2}-x_{1}}}}
b 1 = 3   y 1 y 0 ( x 1 x 0 ) 2 {\displaystyle b_{1}=3\ {\frac {y_{1}-y_{0}}{(x_{1}-x_{0})^{2}}}}
b 2 = 3   ( y 1 y 0 ( x 1 x 0 ) 2 + y 2 y 1 ( x 2 x 1 ) 2 ) {\displaystyle 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   y 2 y 1 ( x 2 x 1 ) 2 {\displaystyle b_{3}=3\ {\frac {y_{2}-y_{1}}{(x_{2}-x_{1})^{2}}}}

Per als tres punts

( 1 , 0.5 )   ,   ( 0 , 0 )   ,   ( 3 , 3 ) {\displaystyle (-1,0.5)\ ,\ (0,0)\ ,\ (3,3)}

s'obté que

k 0 = 0.6875   ,   k 1 = 0.1250   ,   k 2 = 1.5625 {\displaystyle 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 {\displaystyle 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 {\displaystyle 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 {\displaystyle 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 {\displaystyle 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 ) {\displaystyle q_{1}(x)} i q 2 ( x ) {\displaystyle 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.