Interpolación Polinomial a Trozos usando el entorno GNU Octave | 2da Parte

in #steemstem6 years ago
Imagen editada con GIMP, gráficos hechos con GNU Octave. Elaborada por @abdulmath.
Saludos queridos lectores, bienvenidos nuevamente a mi Blog. Hoy les traigo la 2da Parte del tema Interpolación Polinomial a Trozos usando el entorno GNU Octave, en él, hablaremos acerca de la Interpolación cúbica de Hermite a trozos y splines cúbicos. Es de notar que este tema es una continuación de la Interpolación Polinomial usando el entorno GNU Octave | 1era, 2da, y 3era Parte. La misma está dirigida al público en general (aunque debemos acotar, este es un tema de un nivel más alto, para el que es necesario tener de algunos conocimientos previos de análisis real, cálculo avanzado, entre otros más), con atención especial a profesionales y estudiantes universitarios en ciencias, ingeniería y carreras afines. Estoy abierto a sus comentarios y dudas que puedan surgir en el desarrollo del mismo. Sin perder más tiempo, iniciemos.

Interpolación Cúbica de Hermite a Trozos

Ahora vamos a tratar a las funciones cúbicas por partes. Cuando aumentamos el grado, podemos obtener un ajuste más bajo en un conjunto dado de n puntos. La idea es interpolar tanto la función f como su derivada con una función cúbica en cada uno de los subintervalos dados.

Interpolación Cúbica de Hermite

Hasta ahora solo hemos considerado la interpolación de los valores de las funciones en distintos puntos. En el problema de interpolación de Hermite, tanto la función como su derivada son interpoladas. Para ilustrar la idea, consideramos la interpolación de la función f(z) = cos(z) en los puntos



para un polinomio cúbico p3(z). Para valores de epsilon pequeños, notamos que p3(z) parece interpolar tanto la función f como s derivada f' en z = x0 y z = x4. La interpolación la mostramos en la figura siguiente, la cual obtenemos ejecutando el script anexo.


Script para la interpolación cúbica de Hermite. Elaborado en GNU Octave, por @abdulmath.






Gráficas de la interpolación cúbica de Hermite. Elaborado en GNU Octave, por @abdulmath.

A medida que los puntos se fusionan, el polinomio cúbico converge hacia un interpolador cúbico del coseno y su derivada en los puntos z = x0 y z = x4. Esto se denomina interpolador cúbico de Hermite.

En el problema de interpolación cúbica general de Hermite, se nos dan los valores de la función yL e yR, los valores de las derivadas sL y sR, y buscamos los coeficientes a, b, c y d, de modo que si



entonces


Cada una de estas ecuaciones nos dice algo sobre los coeficientes desconocidos. Notemos que


vemos que


donde


Si lo expresamos en forma matricial obtenemos


La solución a este sistema triangular es simple:


donde


Por lo tanto podemos construir la siguiente función


Función para hallar los coeficientes del interpolador cúbico. Elaborado en GNU Octave, por @abdulmath.

Una expresión de error para el interpolador cúbico de Hermite se puede obtener del siguiente Teorema.

Teorema 1


Supongamos que f(z) y la primera derivada de f son conitnuas en el intervalor [xL, xR] y la constantes M4 satisface


para todo valor de z en el intervalo [xL, xR], si q es el interpolador cúbico de Hermite de f en xL y xR, entonces


donde h = xR - xL.

El teorema lo que nos indica que si la longitud del intervalo se divide por 10, entonces la cota del error se reduce por un factor de 104.



Representación y Configuración

Ahora mostraremos cómo unir una sucesión de interpolantes cúbicos de Hermite para que el polinomio cúbico resultante C(z) interpole los datos (x1, y1t), . . . , (xn, yn), con las pendientes establecidas s1, s2, . . . , sn. Para ese fin asumimos x1 < x2 < . . . < xn y definimos el i-ésimo polinomio cúbico local por



Definimos el polinomio cúbico a trozos por


Nuestro objetivo es determinar a(1: n-1), b(1: n-1), c(1: n-1), y d(1: n-1) tal que


Este será el caso si simplemente resolvemos los siguientes n - 1 problemas cúbicos de Hermite:


Aplicando lo que hicimos con el interpolador cúbico para cada i tenemos entonces


donde


y


Podríamos usar HCubic para resolver los coeficientes:


Pero obtener una mejor solución podemos vectorizar los cálculos de la siguiente manera


Script de la función para vectorizar los resultados de los coeficientes. Elaborado en GNU Octave, por @abdulmath.

Si M4 acota |f(4)(x)| en el intervalor [x1, xn], entonces por el Teorema anterior implica que


para todo valor de z en el intervalo [x1, xn], donde h1 es la longitud del subintervalo mas grande, es decir, máxi|xi + 1 - xi|.

Evaluación

La evaluación de C(z) tiene dos partes. Al igual que con cualquier polinomio por partes que deba evaluarse, se debe determinar la posición de z en la partición. Una vez que se logra esto, se debe evaluar el cúbico local correspondiente. Así, anexamos una función que se puede usar para evaluar C en un vector de valores z:



Script para Evaluar la función C(z). Elaborado en GNU Octave, por @abdulmath.

De forma análoga a pwLeval utilizamos Locate para determinar el subintervalo que contiene a la j-ésimo punto de evaluación zj. La versión cúbica de HornerN se usa para evaluar el polinomio cúbico local apropiado. En el siguiente script mostraremos el uso de pwC y pwCEval


Script de evaluaciones de las funciones pwC y pwCEval. Elaborado en GNU Octave, por @abdulmath.

A continuación mostramos la figuras generadas por el script anterior, donde podemos apreciar, que a medida que incerementamos el numero de puntos sobre la partición, el interpolante cúbico de Hermite converge a la función f.





Queridos amigos y lectores, espero hayan disfrutado y aprendido un poco más sobre la Interpolación Polinomial a Trozos usando el entorno GNU Octave, (1era Parte y 2da Parte) donde pueden usar las funciones construidas y usar los script de aplicaciones modificandolos con nuevas funciones y así poner en práctica todo lo que hemos aprendido hasta el momento. Estoy seguro que será de mucho apoyo a ustedes, hijos, nietos, sobrinos o amigos que quieran aprender un poco más del maravilloso mundo de las matemáticas y la programación. No olviden dejar sus comentarios. Saludos y nos leemos pronto.


Si desean consultar un poco más del tema pueden usar las siguientes referencias:

  • Demidovich, B. P., and I. A. Maron. Computational Mathematics Mir, Moscow, 1976.
  • Björck, Åke. Numerical methods in matrix computations. Vol. 59. Cham: Springer, 2015.
  • Burden, Richard L., and J. Douglas Faires. Numerical analysis. Ninth Edition. Cengage Learning. 2011.

Las imágenes, separadores y las ecuaciones fueron creadas y editadas por @abdulmath usando software libre, GNU Octave, , GIMP e Inkscape.



@SteemSTEM es un proyecto comunitario con el objetivo de promover y apoyar la Ciencia, la Tecnología, la Ingeniería y las Matemáticas en la blockchain Steem. @Stem-espanol es parte de esta comunidad, si desea apoyar el proyecto, puedes contribuir con contenido en español en las áreas de Ciencia, Tecnología, Ingeniería y Matemáticas, utilizando las etiquetas #steemstem y #stem-espanol.



Imagen diseñada con GIMP y elaborada por @abdulmath.

Sort:  



This post has been voted on by the steemstem curation team and voting trail.

There is more to SteemSTEM than just writing posts, check here for some more tips on being a community member. You can also join our discord here to get to know the rest of the community!

Thanks for the support

Hi @abdulmath!

Your post was upvoted by utopian.io in cooperation with steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

Contribute to Open Source with utopian.io

Learn how to contribute on our website and join the new open source economy.

Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV

Thanks for the support

Muy buen trabajo amigo @abdulmath. Debido a su excelente presentación y a su muy buen contenido, disfruté leerlo. Si tienes algún tiempo disponible, te invito a ver mi post sobre la Energía. Saludos.

Hola amigo @tsoldovieri, agradecido por tus buenas comentarios, y mucho mas que la lectura haya sido provechosa y te gustará mucho. con gusto pasaré por tu blog. Saludos.

Coin Marketplace

STEEM 0.35
TRX 0.12
JST 0.040
BTC 70597.89
ETH 3559.60
USDT 1.00
SBD 4.77