A interpolación usando Sage

A función lagrange_polynomial permite calcular o polinomio de interpolación global:

sage: nodes = [(0,1),(2,2),(3,-2),(-4,9)] # nodos de interpolacion
sage: R = PolynomialRing(RDF, 'x') # espacio de polinomios con coeficientes reales
sage: f = R.lagrange_polynomial(nodes) # pol. de interpolacion
-0.2738095238095238*x^3 - 0.13095238095238104*x^2 + 1.8571428571428572*x + 1.0
sage: P = plot(f,-4,3) # grafica del polinomio
sage: Q = line(nodes, marker='o', linestyle="") # grafica de los nodos
sage: P+Q

lagint

A interpolación linear a cachos puede verse de forma gráfica así:

sage: line(nodes, marker='o')

lin_interp

Para obtener el polinomio de interpolación linear a cachos como expresión evaluable, é necesario usar o seguinte script:

# script linear_interpolation.sage
def linint(nodes): # expresion Piecewise para el interpolador lineal a trozos
    l = []
    for i in range(len(nodes)-1):
        P = nodes[i]
        Q = nodes[i+1]
        l.append([(P[0], Q[0]), (Q[1]-P[1])*(x-P[0])/(Q[0]-P[0])+P[1]])
    return Piecewise(l)

Para  avalialo, basta cargar e usar o script:

sage: attach('linear_interpolation.sage')
sage: p = linint(nodes)
sage: p(1)
3/2

A interpolación a cachos por splines cúbicos pode construirse usando o comando spline:

sage: nodes = [(0, 1), (1, 2), (4, 5), (5, 3)]
sage: s = spline(nodes)
sage: plot(s,0,5) + line(nodes, marker="o", linestyle="")

splExemplo

Interpolamos a exponencial nos nodos de abscisas 0, 1 e 2 usando tanto interpolación global coma interpolación a cachos por rectas e splines cúbicos.

sage: t     = vector([0..2])
sage: f(x)  = exp(x)
sage: nodes = zip(t,t.apply_map(f))
sage: R = PolynomialRing(RDF, 'x')
sage: p = R.lagrange_polynomial(nodes)
sage: s = spline(nodes)
sage: g = plot(f, 0, 2, color='blue',    legend_label='exponencial') + \
....:     plot(p, 0, 2, color='green',   legend_label='polinomio') + \
....:     line(nodes,   color='cyan',    legend_label='linear', marker='o') + \
....:     plot(s, 0, 2, color='magenta', legend_label='spline')
sage: g.set_legend_options(loc='lower right')
sage: g.save('g.png')

interp-exp-sageExercicio: O administrador dun cluster descobre que un programa que procesa ficheiros tarda 4 s para ficheiros de 1 MB, 6 s para ficheiros de 2 MB e 10 s para ficheiros de 3 MB. Para estimar canto tempo tardará en procesar ficheiros de 1,5 MB, calcula o polinomio de interpolación de grao 2 que pasa polos tres puntos anteriores. Usa tamén o polinomio linear a cachos e o spline cúbico para facer esa estimación.

Advertisements
Esta entrada foi publicada en Sage. Ligazón permanente.

One Response to A interpolación usando Sage

  1. Pingback: Interpolación a cachos | fundmat

Deixar unha resposta

introduce os teu datos ou preme nunha das iconas:

Logotipo de WordPress.com

Estás a comentar desde a túa conta de WordPress.com. Sair / Cambiar )

Twitter picture

Estás a comentar desde a túa conta de Twitter. Sair / Cambiar )

Facebook photo

Estás a comentar desde a túa conta de Facebook. Sair / Cambiar )

Google+ photo

Estás a comentar desde a túa conta de Google+. Sair / Cambiar )

Conectando a %s