Autor Tema: Editar código de Hermite en Python.

0 Usuarios y 2 Visitantes están viendo este tema.

02 Abril, 2024, 06:41 am
Leído 87 veces

lorena.zambrano

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ve
  • Karma: +0/-0
Hola, quiero emplear el código de interpolación de Hermite en Python para comprobar mis cálculos. He encontrado este video pero no logro apreciar el código, mi PC es de de las viejas, no tiene mucha resolución

https://foro.rinconmatematico.com/index.php?topic=126058.0



04 Abril, 2024, 07:00 am
Respuesta #1

lorena.zambrano

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ve
  • Karma: +0/-0
hola, he obtenido el polinomio de Hermite , mas la aproximación al valor de\(  x \), mediante un código en python. el detalle es que no me muestra la gráfica. espero puedan ayudarme a corregir el fallo. anexo el código:

import numpy as np
from sympy import Symbol, lambdify, expand, pprint
import matplotlib.pyplot as plt
x = Symbol('x')

def diferencia(x , y , yp):
    n = len(x)
    z = np.empty(shape= 2 * n, dtype=float)
    Q = np.zeros(shape=(2 * n, 2 * n), dtype=float)
    d =np.empty(shape=2 * n, dtype=float)
   
    for i in np.arange(n):
        z[2 * i ] = x
        z[2 * i + 1]= x
        Q[2 * i][0]  = y
        Q[2 * i + 1][0] = y
        Q[2 * i + 1][1] = yp
        if i !=0:
            Q[2 * i ][1] = (Q[2 * i ][0] - Q[2 * i - 1][0]) / (z[2 * i] - z[2 * i - 1])
       
    for i in np.arange (2 , 2 * (n - 1) + 2):
        for j in np.arange(2, i + 1 ):
                f = Q[j-1] - Q[i - 1][j - 1]
                g = z - z[i - j]
                Q[j] = f / g
    d = Q.diagonal()
    return z, d

def polhermitesym(diff, z):
    n = len(z) - 1
    pol = diff[n]
    for k in np.arange(1, n + 1):
        pol = diff[n - k] + (x - z[n - k])*pol
    return pol

if '_name_' "" '_maín_' :
    datos_x = np.array([1, 1.05, 1.07], dtype=float)
    datos_y = np.array([0.7657893864, 0.8354311093, 0.858930566], dtype=float )
    datos_yp =[1.531578773, 1.242214551, 1.105631437]
   
    d = diferencia(datos_x, datos_y, datos_yp)
    diff = d[1]
    polhermitesym = polhermitesym(diff, d[0])
    pprint(' el polinomio interpolador de Hermite es : ')
    pprint(expand(polhermitesym))
    pprint(' el valor aproximado obtenido con x={0} es H({0})={1}'.format(1.03, polhermitesym.subs(x, 1.03)))
    polisimple = polhermitesym.expand()
    px = lambdify(x,polisimple)
    muestras = 101
    pxi = np.linspace(-2,5, muestras)
    pfi = px(pxi)
    plt.plot(datos_x, datos_y,'0', label = 'puntos')
    plt.plot(pxi,pfi, label ='polinomio')
    plt.legend()
    plt.xlabel('xi')
    plt.ylabel('fi')
    plt.title('interpolacion de Hermite')
   

05 Abril, 2024, 04:42 am
Respuesta #2

lorena.zambrano

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ve
  • Karma: +0/-0
Ya pude ejecutar el código, me pueden ayudar para calcular el error real  en este mismo código? No sé cómo codificar está parte

05 Abril, 2024, 07:51 am
Respuesta #3

lorena.zambrano

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ve
  • Karma: +0/-0
Alguien puede ejercitar este código y mostrarme como aparece la gráfica? Es que al yo ejecutarla la gráfica sale incompleta, no me aparece el polinomio interpolador más la aproximación, no sé si es mi PC que está teniendo problemas, por favor