Está en la página 1de 35

Programa de Python: Interpolación Segmentaria o Splines.

Primeramente se recuerda que la interpolación hace referencia a la obtención de


nuevos puntos partiendo del conocimiento de un conjunto conocido de puntos. Los
cuales son obtenidos por medio de muestreo o a partir de un experimento y se
pretende construir una función que los ajuste.

Así pues, para la construcción de polinomios de un alto grado plantea muchos


problemas. Por un lado, la forma de la función polinómica de grado alto a menudo
no responde al fenómeno debido al gran número de extremos e inflexiones. Por otro
lado, su cálculo es muy complicado, lo que limita su utilidad en análisis numérico.
Es a menudo más conveniente dividir el intervalo de interés en subintervalos más
pequeños y usar en cada intervalo polinomios de grado relativamente bajo, tratando
de que la función a trozos definida de este modo tenga un aspecto final adecuado
al fenómeno que estamos representando.

La idea central es que en vez de usar un solo polinomio para interpolar los datos,
podemos usar segmentos de polinomios y unirlos adecuadamente para formar
nuestra interpolación. Podemos decir, que una función Spline está formada por
varios polinomios, cada uno definido en un intervalo y que se unen entre si bajo
ciertas condiciones de continuidad.

Entonces, para Splines de grado k, dada nuestra tabla de datos:

𝒙 𝒙𝟎 𝒙𝟏 … 𝒙𝒏

𝒚 𝑦0 𝑦1 … 𝑦𝑛

Donde suponemos que x0<x1<…<xn, y dado k un número entero positivo, una


función de interpolación spline de grado k, para la tabla de datos, es una función
S(x) tal que:

 𝑆(𝑥𝑖 ) = 𝑦𝑖 , para toda i=0,1,…,n.


 𝑆(𝑥) es un polinomio de grado ≤k en cada subintervalo [𝑥𝑖−1 , 𝑥𝑖 ]
 𝑆(𝑥) tiene derivada continua hasta de orden k-1 en [𝑥0 , 𝑥𝑛 ]
Funciones Splines de grado 1.
Dados los n+1 puntos
𝒙 𝒙𝟎 𝒙𝟏 … 𝒙𝒏
𝒚 𝑦0 𝑦1 … 𝑦𝑛
Una función spline de grado 1 que interpole los datos es simplemente unir cada uno
de los puntos mediante segmentos de recta, como sigue:

Claramente esta función cumple con las


condiciones de la spline de grado 1. Así,
tenemos que para este caso:

𝑆1 (𝑥) 𝑠𝑖 𝑥 ∈ [𝑥0 , 𝑥1 ]
𝑆2 (𝑥) 𝑠𝑖 𝑥 ∈ [𝑥1 , 𝑥2 ]
𝑆(𝑥) =

{𝑆𝑛 (𝑥) 𝑠𝑖 𝑥 ∈ [𝑥𝑛 , 𝑥𝑛 ]

Donde:

 𝑆𝑗 (𝑥) es un polinomio de grado menor o igual que 1


 S(𝑥) tiene derivada continua de orden k-1=0
 S(𝑥𝑗 ) = 𝑦𝑗 , para toda j = 0,1, … , 𝑛.

Por lo tanto, la spline de grado 1 queda definida como:

𝑦0 + 𝑓[𝑥1 , 𝑥0 ](𝑥 − 𝑥0 ) 𝑠𝑖 𝑥 ∈ [𝑥0 , 𝑥1 ]


𝑦1 + 𝑓[𝑥2 , 𝑥1 ](𝑥 − 𝑥1 ) 𝑠𝑖 𝑥 ∈ [𝑥1 , 𝑥2 ]
𝑆(𝑥) =

{𝑦𝑛−1 + 𝑓[𝑥𝑛 , 𝑥𝑛−1 ](𝑥 − 𝑥𝑛−1 ) 𝑠𝑖 𝑥 ∈ [𝑥𝑛−1 , 𝑥𝑛 ]

Donde 𝑓[𝑥𝑖 , 𝑥𝑗 ] es la diferencia dividida de Newton o puede ser igualmente la


pendiente m.
Funciones Splines de grado 2 o cuadrática.
Para asegurar que las m-esimas derivadas sean continuas en los nodos, se debe
usar un polinomio de al menos (m+1)-enesimo orden. Así pues, el objetivo de los
polinomios cuadráticos es el de obtener un polinomio de segundo orden para cada
uno de los intervalos entre los puntos. El polinomio para cada uno de estos
intervalos se representa generalmente como:

𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 2 + 𝑏𝑖 𝑥 + 𝑐𝑖

Para los n+1 puntos, existen n intervalos, y por lo tanto, 3n incógnitas constantes
por evaluar. Por lo tanto se requieren 3n ecuaciones o condiciones para evaluar las
incógnitas. Estas son:

1.- Los valores de las funciones deben ser iguales en los nodos interiores. Esta
condición se representa mediante (con 2n-2 condiciones):

2
𝑎𝑖−1 𝑥𝑖−1 + 𝑏𝑖−1 𝑥𝑖−1 + 𝑐𝑖−1 = 𝑓(𝑥𝑖−1 ) (1)

2
𝑎𝑖 𝑥𝑖−1 + 𝑏𝑖 𝑥𝑖−1 + 𝑐𝑖 = 𝑓(𝑥𝑖−1 ) (2) con i=2 hasta n

2.- La primera y la última función deben pasar a través de los puntos finales. Esto
agrega dos ecuaciones adicionales (con 2 condiciones):

𝑎𝑖 𝑥02 + 𝑏𝑖 𝑥0 + 𝑐𝑖 = 𝑓(𝑥0 ) (3)

𝑎𝑛 𝑥𝑛2 + 𝑏𝑛 𝑥𝑛 + 𝑐𝑛 = 𝑓(𝑥𝑛 ) (4)

3.- Las primeras derivadas en los nodos interiores deben ser iguales. La primera
derivada de la ecuación es (con n-1 condiciones):

𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 2 + 𝑏𝑖 𝑥 + 𝑐𝑖 → 𝑓 , (𝑥) = 2𝑎𝑥 + 𝑏

Por lo tanto 2𝑎𝑖−1 𝑥𝑖−1 + 𝑏𝑖−1 = 2𝑎𝑖 𝑥𝑖−1 + 𝑏𝑖 (5) con i=2 hasta n
4.-Se supone que la segunda derivada es cero en el primer punto. Ya que la
segunda derivada de la ecuación es 2ª, esta condición se expresa matemáticamente
como (con 1 condición):

𝑎1 = 0 (6)

La interpretación visual de esta última condición es que los primeros dos puntos se
conectan mediante una línea recta.

Interpolación segmentaria de grado 3 o cubica.

El objetivo de la interpolación segmentaria cubica es obtener polinomios de tercer


orden para cada uno de los intervalos entre nodos, de la forma:

𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 3 + 𝑏𝑖 𝑥 2 + 𝑐𝑖 𝑥 + 𝑑𝑖

Por lo tanto, para los n+1 puntos, existen n intervalos y 4n incógnitas constantes por
evaluar. Como se hizo para los polinomios cuadráticos, ahora se requieren de 4n
condiciones para evaluar las incógnitas. Estas son:

1.- Los valores de las funciones deben ser iguales en los nodos interiores. Esta
condición se representa mediante (con 2n-2 condiciones):

3 2
𝑎𝑖−1 𝑥𝑖−1 + 𝑏𝑖−1 𝑥𝑖−1 + 𝑐𝑖−1 𝑥𝑖−1 + 𝑑𝑖−1 = 𝑓(𝑥𝑖−1 ) (1)

3 2
𝑎𝑖 𝑥𝑖−1 + 𝑏𝑖 𝑥𝑖−1 + 𝑐𝑖 𝑥𝑖−1 + 𝑑𝑖 = 𝑓(𝑥𝑖−1 ) (2) con i=2 hasta n

2.- La primera y la última función deben pasar a través de los puntos finales. Esto
agrega dos ecuaciones adicionales (con 2 condiciones):

𝑎1 𝑥03 + 𝑏1 𝑥02 + 𝑐1 𝑥0 + 𝑑1 = 𝑓(𝑥0 ) (3)

𝑎𝑛 𝑥𝑛3 + 𝑏𝑛 𝑥𝑛2 + 𝑐𝑛 𝑥𝑛 + 𝑑𝑛 = 𝑓(𝑥𝑛 ) (4)

3.- Las primeras derivadas en los nodos interiores deben ser iguales (con n-1
condiciones). La primera derivada de la ecuación es:
𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 3 + 𝑏𝑖 𝑥 2 + 𝑐𝑖 𝑥 + 𝑑𝑖 → 𝑓 , (𝑥) = 3𝑎𝑥 2 + 𝑏𝑥 + 𝑐

2 2
Por lo tanto 3𝑎𝑖−1 𝑥𝑖−1 + 2𝑏𝑖−1 𝑥𝑖−1 + 𝑐𝑖−1 = 3𝑎𝑖 𝑥𝑖−1 + 2𝑏𝑖 𝑥𝑖−1 + 𝑐𝑖 (5) con i=2 hasta n

4.- Las segundas derivadas en los nodos interiores deben ser iguales (con n-1
condiciones). La segunda derivada de la ecuación es:

𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 3 + 𝑏𝑖 𝑥 2 + 𝑐𝑖 𝑥 + 𝑑𝑖 → 𝑓 , (𝑥) = 6𝑎𝑥 + 2𝑏

Por lo tanto 6𝑎𝑖−1 𝑥𝑖−1 + 2𝑏𝑖−1 = 6𝑎𝑖 𝑥𝑖−1 + 2𝑏𝑖 (6) con i=2 hasta n

5.- Las segundas derivadas en los nodos finales son cero (2 condiciones).

6𝑎1 𝑥0 + 2𝑏0 = 0

6𝑎𝑛 𝑥𝑛 + 2𝑏𝑛 = 0

Con el proceso de la segmentaria cuadrática o cubica se sigue el mismo proceso


en la parte final, la cual consiste en ir agregando los coeficientes obtenidos de las
correspondientes 𝑎𝑖 , 𝑏𝑖 , 𝑐𝑖 𝑜 𝑑𝑖 en su respectiva columna.

𝑎1 𝑏1 𝑐1 𝑎2 𝑏2 𝑐2 … 𝑎𝑛 𝑏𝑛 𝑐𝑛 Para la cuadrática

𝑎1 𝑏1 𝑐1 𝑑1 𝑎2 𝑏2 𝑐2 𝑑2 … 𝑎𝑛 𝑏𝑛 𝑐𝑛 𝑑𝑛 Para la cubica

En el caso de la matriz para la cuadrática se puede omitir la ecuación y columna de


a1 y obtener así una matriz de grado n-1. Posteriormente se pasa a resolver la
matriz, de lo cual se obtienen los coeficientes para las ecuaciones segmentarias.

𝑆1 (𝑥) 𝑠𝑖 𝑥 ∈ [𝑥0 , 𝑥1 ]
𝑆2 (𝑥) 𝑠𝑖 𝑥 ∈ [𝑥1 , 𝑥2 ]
𝑆(𝑥) =

{𝑆𝑛 (𝑥) 𝑠𝑖 𝑥 ∈ [𝑥𝑛 , 𝑥𝑛 ]

Donde 𝑆𝑛 (𝑥) = 𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 3 + 𝑏𝑖 𝑥 2 + 𝑐𝑖 𝑥 + 𝑑𝑖 𝑜 𝑓𝑖 (𝑥) = 𝑎𝑖 𝑥 2 + 𝑏𝑖 𝑥 + 𝑐𝑖

A continuación se presenta el código desarrollado en Python para la resolución de


este método, las explicaciones de cada sección se expresan en la imagen y
corresponden a la letra de color rojo y que contiene un # al inicio.
Código de Segmentaria Lineal.
Código de Segmentaria Cuadrática.
Código de Segmentaria Cubica.
Menú del Programa General (Contiene las funciones anteriores).
x f(x)

Ejercicio 1. 3.0 2.5

Utilizando los 3 puntos indicados en la tabla, establecer el sistema 4.5 1.0


de ecuaciones que resulta de la interpolación segmentaria
cubica. Resolver y comparar con la interpolación segmentaria 7.0 2.5
cuadrática para x=5.
Observaciones.

Como se puede notar por los resultados obtenidos mostrados en el cuadro rojo al
evaluar el x=5 y con más ayuda aun debido a la gráfica, se puede observar que el
resultado en los tres distintos tipos de segmentación es muy variado, esto debido a
que la lineal hace movimiento muy bruscos de una línea a otra. En la cuadrática
como se muestra, primero es lineal y esta peculiaridad le da el problema de que su
continuación serpentea mucho lo que hace que los datos no sean muy apegados a
lo que realmente pueden ser, lo que quiere decir a mi gusto que da una mala
interpolación. Por el contrario como se nota la cubica cumple con una continuidad
en sus pendientes ósea que lleva una curvatura suave, lo que a mi parecer ayuda
a que sus interpolaciones sean más correctas. Además gracias a la gráfica se puede
notar que los tres métodos en el primer subintervalo contienen cierta cercanía pero
en un segundo subintervalo es cuando se comienza a ver claramente sus
diferencias.
x f(x)

0.55 300
Ejercicio 2.
0.62 250
Utilizando los 3 puntos indicados en la tabla, establecer el sistema
de ecuaciones que resulta de la interpolación segmentaria 0.8 150
cubica. Resolver para x=0.7 y comparar con interpolación
segmentaria cuadrática.
Observaciones.

Al observar el recuadro rojo de la página anterior donde se obtienen los resultados


obtenidos de la evaluación de x=0.7 en la interpolación segmentaria se puede notar
que en este caso existe menos diferencias entre los valores interpolados por cada
método, del cual como conocemos que valor es el real obtenido en el fenómeno
corresponde a 200 podemos notar que la interpolación más cercada a la realidad
es la cuadrada con una diferencia de 1.5 y le ha ganado a la cubica que tiene una
diferencia de 1.6, pero, si vemos el grafico podemos notar que en realidad los tres
método en este caso llevar una forma muy similar, de lo que yo puedo interpretar
que también es un punto a tener en cuenta el cómo se comportan los datos, puesto
que son muy zigzagueantes el ganador claro seria el método cubico, pero ya que
estos datos seguían una forma descendiente muy apegada a una ecuación
cuadrática o cubica simple, pues no habría mucho problema entre cada método.
Ejercicio 3.

X -1 1 2 4

y -1 1 5 -2
Observaciones.

Debido a que los dos ejercicios anteriores me parecieron que mostraban muy poco
el comportamiento del Spline con respecto a cuándo se presentan muchos puntos
me di a la tarea de realizar otra evaluación pero ahora en este caso con cuatro
puntos conocidos. En este ejercicio no hare caso de las evaluaciones del cuadro
rojo y me centrare en la gráfica, de la cual se puede observar como la cuadrática y
la lineal se comporta de la misma forma en el primer subintervalo, y es a partir del
segundo y en especial en el tercero donde se presenta la mayor diferencia. Como
se puede notar la segmentaria cubica es la que lleva las de ganar puesto que no
tiene grandes incrementos en los nodos a diferencia de la cuadrática, y es aquí
donde me queda en claro que para acercamientos reales al interpolar confiaría más
en la cubica, de ahí la lineal y por último la cuadrática. La lineal me parece
interesante porque puede llegar a ser la más precisa y sencilla de calcular siempre
y cuando se conozcan múltiples puntos del fenómeno.
Conclusión.

De manera general puedo concluir que las interpolaciones segmentarias son sin
duda alguna la mejor formar de obtener datos, puesto que a diferencia del método
de LaGrange o de Newton mientras más puntos conocidos para la interpolación
terminan afectándose las curvaturas, por lo tanto el subdividir todo el intervalo en
subintervalos ayuda a realizar aproximaciones más reales.

Ahora en cuanto a los tres métodos, como dije en las observaciones de cada método
segmentario los cuales son lineal, cuadrática y cubica, la que me pareció que era
menos precisa fue la cuadrática pues el movimiento de sus curvas era muy
exagerado, después seguía la lineal la cual me parece muy correcta para casos
donde se conozcan muchos puntos pues te da un acercamiento a los datos reales
bastante aceptable y además es fácil de calcular las ecuaciones del intervalo, por
último y como el método más exacto hasta ahora me parece es el cubico puesto
que sus curvaturas conllevan unas pendientes mas uniformes y no exageradas,
para mi gusto es el método a usar por excelencia.

También podría gustarte