Está en la página 1de 8

Ir al contenido

MÉTODOS NUMÉRICOS
MATG1052-FCNM-ESPOL
Menú
PUBLICADO EN2017-12-14 POR EDISON DEL ROSARIO

4.3 Interpolación de Lagrange


Referencia: Chapra 18.2 pdf 540, Burden 9Ed 3.1 p108, Rodriguez 6.2 p195

El polinomio de interpolación de Lagrange es una reformulación del polinomio de


interpolación de Newton, el método evita el cálculo de las diferencias divididas. El
método tolera las diferencias entre las distancias x entre puntos.

El polinomio se construye a partir de las fórmulas:

f_{n} (x) = \sum_{i=0}^{n} L_{i} (x) f(x_{i})fn(x)=i=0∑nLi(x)f(xi)L_{i} (x) =


\prod_{j=0, j \neq i}^{n} \frac{x-x_j}{x_i - x_j}Li(x)=j=0,j≠i∏nxi−xjx−xj
Donde una vez que se han seleccionado los puntos a usar, se generan la misma
cantidad de términos que puntos.
Ejemplo
Dados los 4 puntos en la tabla se requiere generar un polinomio de grado 3 de la
forma:

p(x) = a_0 x^3 + a_1 x^2 + a_2 x^1 + a_3p(x)=a0x3+a1x2+a2x1+a3

xi 0 0.2 0.3 0.4

fi 1 1.6 1.7 2.0

Revisando la aplicación de la fórmula se tiene que calcular tres terminos,

término 1

L_{0} (x) = \frac{(x-0.2)(x-0.3)(x-0.4)}{(0-0.2)(0-0.3)(0-0.4)}L0(x)=(0−0.2)


(0−0.3)(0−0.4)(x−0.2)(x−0.3)(x−0.4)
término 2

L_{1} (x) = \frac{(x-0)(x-0.3)(x-0.4)}{(0.2-0)(0.2-0.3)(0.2-0.4)}L1(x)=(0.2−0)


(0.2−0.3)(0.2−0.4)(x−0)(x−0.3)(x−0.4)
término 3

L_{2} (x) = \frac{(x-0)(x-0.2)(x-0.4)}{(0.3-0)(0.3-0.2)(0.3-0.4)}L2(x)=(0.3−0)


(0.3−0.2)(0.3−0.4)(x−0)(x−0.2)(x−0.4)
término 4

L_{3} (x) = \frac{(x-0)(x-0.2)(x-0.3)}{(0.4-0)(0.4-0.2)(0.4-0.3)}L3(x)=(0.4−0)


(0.4−0.2)(0.4−0.3)(x−0)(x−0.2)(x−0.3)
se construye el polinomio usando la fórmula para f n(x) para cada valor fi,

p_3(x) = 1 L_{0} (x) + 1.6 L_{1} (x) + 1.7 L_{2} (x) + 2 L_{3} (x)p3(x)=1L0(x)
+1.6L1(x)+1.7L2(x)+2L3(x)p_3(x) = 1 \frac{(x-0.2)(x-0.3)(x-0.4)}{(0-0.2)(0-
0.3)(0-0.4)} +p3(x)=1(0−0.2)(0−0.3)(0−0.4)(x−0.2)(x−0.3)(x−0.4)++ 1.6
\frac{(x-0)(x-0.3)(x-0.4)}{(0.2-0)(0.2-0.3)(0.2-0.4)}+1.6(0.2−0)(0.2−0.3)
(0.2−0.4)(x−0)(x−0.3)(x−0.4)+ 1.7 \frac{(x-0)(x-0.2)(x-0.4)}{(0.3-0)(0.3-0.2)
(0.3-0.4)}+1.7(0.3−0)(0.3−0.2)(0.3−0.4)(x−0)(x−0.2)(x−0.4)+ 2 \frac{(x-0)(x-
0.2)(x-0.3)}{(0.4-0)(0.4-0.2)(0.4-0.3)}+2(0.4−0)(0.4−0.2)(0.4−0.3)(x−0)
(x−0.2)(x−0.3)
La simplificación de la expresión del polinomio se puede dejar como tarea.

Una forma de verificar que el polinomio es correcto es usar un punto original xi[i] y
comprobar que la evaluación tiene como resultado fi[i].

xi = np.array([0, 0.2, 0.3, 0.4])

fi = np.array([1, 1.6, 1.7, 2.0])

Algoritmo en Python
En el algoritmo en Python, para construir las expresiones de cada término se usa
la forma simbólica con Sympy.

En cada término Li(x) se usan todos los elementos i , excepto el mismo elemento i,
en el numerador y denominador de la expresión.

En polinomio se agrupan todos los términos multiplicados por su respectivo valor


fi[i].
valores de fi: [1. 1.6 1.7 2. ]

divisores en L(i): [-0.024 0.004 -0.003 0.008]

Polinomio de Lagrange, expresiones

400.0*x*(x - 0.4)*(x - 0.3)

- 566.666666666667*x*(x - 0.4)*(x - 0.2)

+ 250.0*x*(x - 0.3)*(x - 0.2)

- 41.6666666666667*(x - 0.4)*(x - 0.3)*(x - 0.2)

Polinomio de Lagrange:

41.6666666666667*x**3 - 27.5*x**2 + 6.83333333333334*x + 1.0

Las expresiones del polinomio contiene los binomios en su forma básica, para
resolver y simplificar las ecuaciones se usa polinomio.expand().

Para graficar el polinomio es conveniente convertirlo a la forma lambda con numpy,


de esta forma se evalua en una sola linea todos los puntos para el intervalo [a,b]
en x.

# Interpolacion de Lagrange

# divisoresL solo para mostrar valores

import numpy as np

import sympy as sym

import matplotlib.pyplot as plt

# INGRESO , Datos de prueba

xi = np.array([0, 0.2, 0.3, 0.4])

fi = np.array([1, 1.6, 1.7, 2.0])


# PROCEDIMIENTO

# Polinomio de Lagrange

n = len(xi)

x = sym.Symbol('x')

polinomio = 0

divisorL = np.zeros(n, dtype = float)

for i in range(0,n,1):

# Termino de Lagrange

numerador = 1

denominador = 1

for j in range(0,n,1):

if (j!=i):

numerador = numerador*(x-xi[j])

denominador = denominador*(xi[i]-xi[j])

terminoLi = numerador/denominador

polinomio = polinomio + terminoLi*fi[i]

divisorL[i] = denominador

# simplifica el polinomio

polisimple = polinomio.expand()
# para evaluación numérica

px = sym.lambdify(x,polisimple)

# Puntos para la gráfica

muestras = 101

a = np.min(xi)

b = np.max(xi)

pxi = np.linspace(a,b,muestras)

pfi = px(pxi)

# SALIDA

print(' valores de fi: ',fi)

print('divisores en L(i): ',divisorL)

print()

print('Polinomio de Lagrange, expresiones')

print(polinomio)

print()

print('Polinomio de Lagrange: ')

print(polisimple)

# Gráfica

plt.plot(xi,fi,'o', label = 'Puntos')


plt.plot(pxi,pfi, label = 'Polinomio')

plt.legend()

plt.xlabel('xi')

plt.ylabel('fi')

plt.title('Interpolación Lagrange')

plt.show()

CATEGORÍASUNIDAD 4 INTERPOLACIÓN

Navegación de entradas
Entrada anterior:A N T E R I O R 4.1 El polinomio de interpolación
Siguiente entradaS I G U I E N T E Interpolar – Pato en pleno vuelo

 ►Evaluaciones (234)
 ►Soluciones (92)
 ▼Unidades (71)
o ►Unidad 1 Introducción (11)
o ►Unidad 2 Raíces de ecuaciones (11)
o ►Unidad 3 Sistemas de ecuaciones (14)
o ▼Unidad 4 Interpolación (12)

 4.1 El polinomio de interpolación

 4.2 Diferencias finitas

 4.2.1 Diferencias finitas avanzadas polinomio

 4.2.2 Diferencias divididas de Newton

 4.3 Interpolación de Lagrange

 4.4 Trazadores lineales (Splines) grado1

 4.4.1 Trazadores Cúbicos Natural o libre

 4.5 Interpolación paramétrica

 Interpolar - Mascota 50 años

 Interpolar - Mascota descansando

 Interpolar - Pato en pleno vuelo


 Unidad 04

o ►Unidad 5 Integración y Diferenciación (8)


o ►Unidad 6 EDO (6)
o ►Unidad 7 EDP (8)
o Unidades - Temas

 ►Videos Tutoriales (38)
Buscar por:Buscar

CONTACTO

Edison Del Rosario


edelros@espol.edu.ec
Blog edelros

Creado con WordPress

Ir a la barra de herramientas

También podría gustarte