Articulo de referencia

Interpolación de splines

En el campo matemático del análisis numérico , la interpolación spline es una forma de interpolación donde el interpolante es un tipo especial de polinomio por partes llamado sp...

En el campo matemático del análisis numérico , la interpolación spline es una forma de interpolación donde el interpolante es un tipo especial de polinomio por partes llamado spline . Es decir, en lugar de ajustar un solo polinomio de alto grado a todos los valores a la vez, la interpolación spline ajusta polinomios de bajo grado a pequeños subconjuntos de los valores, por ejemplo, ajustando nueve polinomios cúbicos entre cada uno de los pares de diez puntos, en lugar de ajustar un solo polinomio de grado nueve a todos ellos. La interpolación spline a menudo se prefiere a la interpolación polinómica porque el error de interpolación se puede hacer pequeño incluso cuando se utilizan polinomios de bajo grado para la spline. [1] La interpolación spline también evita el problema del fenómeno de Runge , en el que puede ocurrir una oscilación entre puntos cuando se interpola utilizando polinomios de alto grado.

Introducción

Interpolación con splines cúbicos entre ocho puntos. Los dibujos técnicos hechos a mano para la construcción naval son un ejemplo histórico de interpolación de splines; los dibujos se construían utilizando reglas flexibles que se doblaban para seguir puntos predefinidos.

En un principio, spline era un término que designaba a las reglas elásticas que se doblaban para pasar por una serie de puntos predefinidos, o nudos . Se utilizaban para hacer dibujos técnicos para la construcción y construcción naval a mano, como se ilustra en la figura.

Queremos modelar tipos similares de curvas utilizando un conjunto de ecuaciones matemáticas. Supongamos que tenemos una secuencia de nudos, a través de . Habrá un polinomio cúbico entre cada par sucesivo de nudos y que se conecta a ambos, donde . Por lo tanto, habrá polinomios, con el primer polinomio comenzando en , y el último polinomio terminando en . norte + 1 {\estilo de visualización n+1} ( incógnita 0 , y 0 ) {\displaystyle (x_{0},y_{0})} ( incógnita norte , y norte ) {\displaystyle (x_{n},y_{n})} q i ( incógnita ) = y Estilo de visualización q_{i}(x)=y} ( incógnita i 1 , y i 1 ) {\displaystyle (x_{i-1},y_{i-1})} ( incógnita i , y i ) {\displaystyle (x_{i},y_{i})} i = 1 , 2 , , norte {\displaystyle i=1,2,\puntos ,n} norte {\estilo de visualización n} ( incógnita 0 , y 0 ) {\displaystyle (x_{0},y_{0})} ( incógnita norte , y norte ) {\displaystyle (x_{n},y_{n})}

La curvatura de cualquier curva se define como y = y ( incógnita ) {\displaystyle y=y(x)}

k = y " ( 1 + y " 2 ) 3 / 2 , {\displaystyle \kappa ={\frac {y''}{(1+y'^{2})^{3/2}}},}

donde y son las derivadas primera y segunda de con respecto a . Para hacer que la spline adopte una forma que minimice la flexión (bajo la restricción de pasar por todos los nudos), definiremos que y sean continuos en todas partes, incluidos los nudos. Cada polinomio sucesivo debe tener valores iguales (que son iguales al valor y del punto de datos correspondiente), derivadas y segundas derivadas en sus nudos de unión, es decir que y " {\estilo de visualización y'} y " {\estilo de visualización y''} y ( incógnita ) {\estilo de visualización y(x)} incógnita {\estilo de visualización x} y " {\estilo de visualización y'} y " {\estilo de visualización y''}

{ q i ( incógnita i ) = q i + 1 ( incógnita i ) = y i q i " ( incógnita i ) = q i + 1 " ( incógnita i ) q i " ( incógnita i ) = q i + 1 " ( incógnita i ) 1 i norte 1. {\displaystyle {\begin{cases}q_{i}(x_{i})=q_{i+1}(x_{i})=y_{i}\\q'_{i}(x_{i})=q'_{i+1}(x_{i})\\q''_{i}(x_{i})=q''_{i+1}(x_{i})\end{cases}}\qquad 1\leq i\leq n-1.}

Esto solo se puede lograr si se utilizan polinomios de grado 3 (polinomios cúbicos) o superior. El enfoque clásico es utilizar polinomios de exactamente grado 3 ( splines cúbicos ).

Además de las tres condiciones anteriores, un ' spline cúbico natural ' tiene la condición de que . q 1 " ( incógnita 0 ) = q norte " ( incógnita norte ) = 0 {\displaystyle q''_{1}(x_{0})=q''_{n}(x_{n})=0}

Además de las tres condiciones principales anteriores, un ' spline cúbico fijado ' tiene las condiciones de que y donde es la derivada de la función interpolada. q 1 " ( incógnita 0 ) = F " ( incógnita 0 ) {\displaystyle q'_{1}(x_{0})=f'(x_{0})} q norte " ( incógnita norte ) = F " ( incógnita norte ) {\displaystyle q'_{n}(x_{n})=f'(x_{n})} F " ( incógnita ) {\displaystyle f'(x)}

Además de las tres condiciones principales anteriores, un ' spline sin nudo ' tiene las condiciones de que y . [2] q 1 " ( incógnita 1 ) = q 2 " ( incógnita 1 ) {\displaystyle q'''_{1}(x_{1})=q'''_{2}(x_{1})} q norte 1 " ( incógnita norte 1 ) = q norte " ( incógnita norte 1 ) {\displaystyle q'''_{n-1}(x_{n-1})=q'''_{n}(x_{n-1})}

Algoritmo para encontrar el spline cúbico interpolador

Queremos encontrar cada polinomio dados los puntos que pasan por . Para ello, consideraremos solo una única parte de la curva, , que interpolará de a . Esta parte tendrá pendientes y en sus puntos finales. O, más precisamente, q i ( incógnita ) estilo de visualización q_{i}(x)} ( incógnita 0 , y 0 ) {\displaystyle (x_{0},y_{0})} ( incógnita norte , y norte ) {\displaystyle (x_{n},y_{n})} q ( incógnita ) {\displaystyle q(x)} ( incógnita 1 , y 1 ) {\displaystyle (x_{1},y_{1})} ( incógnita 2 , y 2 ) {\displaystyle (x_{2},y_{2})} a 1 estilo de visualización k_{1} a 2 estilo de visualización k_{2}

q ( incógnita 1 ) = y 1 , {\displaystyle q(x_{1})=y_{1},}
q ( incógnita 2 ) = y 2 , {\displaystyle q(x_{2})=y_{2},}
q " ( incógnita 1 ) = a 1 , {\displaystyle q'(x_{1})=k_{1},}
q " ( incógnita 2 ) = a 2 . {\displaystyle q'(x_{2})=k_{2}.}

La ecuación completa se puede escribir en forma simétrica q ( incógnita ) {\displaystyle q(x)}

dónde

Pero ¿qué son y ? Para derivar estos valores críticos, debemos considerar que a 1 estilo de visualización k_{1} a 2 estilo de visualización k_{2}

q " = d q d incógnita = d q d a d a d incógnita = d q d a 1 incógnita 2 incógnita 1 . {\displaystyle q'={\frac {dq}{dx}}={\frac {dq}{dt}}{\frac {dt}{dx}}={\frac {dq}{dt}}{\frac {1}{x_{2}-x_{1}}}.}

De lo cual se deduce que

Fijando t = 0 y t = 1 respectivamente en las ecuaciones ( 5 ) y ( 6 ), se obtiene de ( 2 ) que efectivamente las primeras derivadas q′ ( x 1 ) = k 1 y q′ ( x 2 ) = k 2 , y también las segundas derivadas

Si ahora ( x i , y i ), i = 0, 1, ..., n son n + 1 puntos, y

donde i = 1, 2, ..., n , y son n polinomios de tercer grado que interpolan y en el intervalo x i −1xx i para i = 1, ..., n tales que q′ i ( x i ) = q′ i +1 ( x i ) para i = 1, ..., n  − 1, entonces los n polinomios juntos definen una función diferenciable en el intervalo x 0xx n , y a = incógnita incógnita i 1 incógnita i incógnita i 1 {\displaystyle t={\tfrac {x-x_{i-1}}{x_{i}-x_{i-1}}}}

para i = 1, ..., n , donde

Si la secuencia k 0 , k 1 , ..., k n es tal que, además, q′′ i ( x i ) = q′′ i +1 ( x i ) se cumple para i = 1, ..., n  − 1, entonces la función resultante tendrá incluso una segunda derivada continua.

De ( 7 ), ( 8 ), ( 10 ) y ( 11 ) se deduce que este es el caso si y sólo si

para i = 1, ..., n  − 1. Las relaciones ( 15 ) son n − 1 ecuaciones lineales para los n + 1 valores k 0 , k 1 , ..., k n .

Para las reglas elásticas que son el modelo para la interpolación de splines, se tiene que a la izquierda del "nudo" más a la izquierda y a la derecha del "nudo" más a la derecha la regla se puede mover libremente y, por lo tanto, tomará la forma de una línea recta con q′′ = 0. Como q′′ debe ser una función continua de x , los "splines naturales" además de las n − 1 ecuaciones lineales ( 15 ) deben tener

q 1 ( 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''_{1}(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,}

es decir que

Finalmente, ( 15 ) junto con ( 16 ) y ( 17 ) constituyen n + 1 ecuaciones lineales que definen de forma única los n + 1 parámetros k 0 , k 1 , ..., k n .

Existen otras condiciones finales, la "spline fija", que especifica la pendiente en los extremos de la spline, y la popular "spline sin nudos", que requiere que la tercera derivada también sea continua en los puntos x 1 y x n −1 . Para la spline sin nudos, las ecuaciones adicionales se leerán así:

q 1 ( x 1 ) = q 2 ( x 1 ) 1 Δ x 1 2 k 0 + ( 1 Δ x 1 2 1 Δ x 2 2 ) k 1 1 Δ x 2 2 k 2 = 2 ( Δ y 1 Δ x 1 3 Δ y 2 Δ x 2 3 ) , {\displaystyle q'''_{1}(x_{1})=q'''_{2}(x_{1})\Rightarrow {\frac {1}{\Delta x_{1}^{2}}}k_{0}+\left({\frac {1}{\Delta x_{1}^{2}}}-{\frac {1}{\Delta x_{2}^{2}}}\right)k_{1}-{\frac {1}{\Delta x_{2}^{2}}}k_{2}=2\left({\frac {\Delta y_{1}}{\Delta x_{1}^{3}}}-{\frac {\Delta y_{2}}{\Delta x_{2}^{3}}}\right),}
q n 1 ( x n 1 ) = q n ( x n 1 ) 1 Δ x n 1 2 k n 2 + ( 1 Δ x n 1 2 1 Δ x n 2 ) k n 1 1 Δ x n 2 k n = 2 ( Δ y n 1 Δ x n 1 3 Δ y n Δ x n 3 ) , {\displaystyle q'''_{n-1}(x_{n-1})=q'''_{n}(x_{n-1})\Rightarrow {\frac {1}{\Delta x_{n-1}^{2}}}k_{n-2}+\left({\frac {1}{\Delta x_{n-1}^{2}}}-{\frac {1}{\Delta x_{n}^{2}}}\right)k_{n-1}-{\frac {1}{\Delta x_{n}^{2}}}k_{n}=2\left({\frac {\Delta y_{n-1}}{\Delta x_{n-1}^{3}}}-{\frac {\Delta y_{n}}{\Delta x_{n}^{3}}}\right),}

dónde . Δ x i = x i x i 1 ,   Δ y i = y i y i 1 {\displaystyle \Delta x_{i}=x_{i}-x_{i-1},\ \Delta y_{i}=y_{i}-y_{i-1}}

Ejemplo

Interpolación con splines cúbicos "naturales" entre tres puntos

En el caso de tres puntos, los valores para se encuentran resolviendo el sistema de ecuaciones lineales tridiagonales. k 0 , k 1 , k 2 {\displaystyle k_{0},k_{1},k_{2}}

[ 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}}}

con

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}}}.}

Por los tres puntos

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

Uno consigue eso

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,}

y de ( 10 ) y ( 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.}

En la figura, se muestra la función spline que consta de dos polinomios cúbicos y está dada por ( 9 ). q 1 ( x ) {\displaystyle q_{1}(x)} q 2 ( x ) {\displaystyle q_{2}(x)}

Véase también

Referencias

  1. ^ Hall, Charles A.; Meyer, Weston W. (1976). "Límites de error óptimos para la interpolación de spline cúbico". Journal of Approximation Theory . 16 (2): 105–122. doi : 10.1016/0021-9045(76)90040-X .
  2. ^ Burden, Richard; Faires, Douglas (2015). Análisis numérico (10.ª ed.). Cengage Learning. págs. 142–157. ISBN 9781305253667.

Lectura adicional

  • Schoenberg, Isaac J. (1946). "Contribuciones al problema de aproximación de datos equidistantes mediante funciones analíticas: Parte A. Sobre el problema de suavizado o graduación. Una primera clase de fórmulas de aproximación analítica". Quarterly of Applied Mathematics . 4 (2): 45–99. doi : 10.1090/qam/15914 .
  • Schoenberg, Isaac J. (1946). "Contribuciones al problema de aproximación de datos equidistantes mediante funciones analíticas: Parte B. Sobre el problema de la interpolación osculatoria. Una segunda clase de fórmulas de aproximación analítica". Quarterly of Applied Mathematics . 4 (2): 112–141. doi : 10.1090/qam/16705 .
  • Herramienta de cálculo y visualización en línea de interpolación de splines cúbicos (con código fuente en JavaScript)
  • "Interpolación de splines", Enciclopedia de Matemáticas , EMS Press , 2001 [1994]
  • Splines cúbicos dinámicos con JSXGraph
  • Conferencias sobre la teoría y la práctica de la interpolación spline
  • Artículo que explica paso a paso cómo se realiza la interpolación de splines cúbicos, pero sólo para nudos equidistantes.
  • Recetas numéricas en C, Ir al Capítulo 3 Sección 3-3
  • Una nota sobre splines cúbicos
  • Información sobre la interpolación de splines (incluido el código en Fortran 77)
  • TinySpline: biblioteca C de código abierto para splines que implementa la interpolación de splines cúbicos
  • SciPy Spline Interpolation: un paquete de Python que implementa la interpolación
  • Interpolación cúbica: biblioteca C# de código abierto para interpolación de splines cúbicos
Retrieved from "https://en.wikipedia.org/w/index.php?title=Spline_interpolation&oldid=1221652794"