Interpolación de Lagrange
En Matlab un polinomio se representa mediante un vector fila que contiene los coeficientes de
las potencias en orden decreciente: empezando por el coeficiente principal y terminando por
el termino independiente.
Ejemplo
el polinomio p(x) = 3x 2 − 2x − 1 se representa con
P= [3 -2 -1];
MATLAB contempla las siguientes operaciones básicas con polinomios:
Calculo de raíces a partir de la lista de coeficientes, por medio del comando roots( ), por
ejemplo
r=roots(p)
nos devuelve
r= 1.0000
-0.3333
El resultado es un vector columna de ceros
Calculo de coeficientes a partir del vector columna de ceros, por medio del comando poly( ),
por ejemplo
Poly(r)
Nos devuelve
Ans= 1.0000 -0.6667 -0.3333
Observe que el polinomio devuelto siempre es monico.
Multiplicación de dos polinomios dado por la lista de sus coeficientes, por medio del comando
conv( , ). Por ejemplo, para comprobar que (x-5) (x+1) = x 2 − 4x – 5 basta ejecutar
Conv([1 -5], [1 1])
Obteniendo
Ans = 1 -4 -5
La división se realiza por medio del comando deconv(,): si p(x)= s(x)q(x)+r(x), se puede usar el
formato
[s, r] = deconv (p , q)
Evaluación de un polinomio dado por la lista de sus coeficientes p en un valor x, por medio del
comando polyval(p, x). Por ejemplo, para comprobar que p(1)0 = basta realizar
Polyval(p , 1)
Obteniendo
Ans= 0
Polyval( ) realiza la evaluación siguiendo el algoritmo de Horner o de multiplicación anidada
Si x es un vector o matriz, MATLAB devuelve la matriz con el polinomio evaluado en cada
elemento.
Recordemos que dados unos nodos de interpolación x= [ X0,X1,….,Xn], los polinomios básicos
de Lagrange se definen por la formula
Entonces el polinomio Pn de menor grado que interpola la nube de puntos (X0,f0),….,(Xn,fn)
está dado por
Ejemplo
Dado los puntos (2,5), (4,6), (5,3)
Con la fórmula de lagrange, encuentre el polinomio de interpolación que incluye a estos
puntos
−¿ f i L i =f 0 L 0( x)+f 1 L1 ( x ) +f 2 L2( x)=5 L0 (x)+6 L 1(x)+3 L2 (x)¿
p2 ( x) ∑ ¿
i=0
2
( x−x i)
L1 ( x ) = ∏ ,i=0 ,1 , 2
j=0 j ≠1 ( xi −x j)
2
(x−x i ) ( x−x i)( x −x2 ) ( x−4)( x−5) x 2−9 x +20
L0 ( x ) = ∏ = = =
j=0 j ≠ 0 ( x 0−x j ) ( x i−x j )(x−x 2) (2−4)(2−5) 6
2
( x−x i) (x−x 0 )(x−x 2) (x−2)(x−5) x 2−7 x+ 10
L1 ( x ) = ∏ = = =
j=0 j ≠1 ( xi −x j ) (x i−x 0 )(x 1−x 2) (4−2)(4−5) −2
2
(x−x i) ( x−x 0 )(x−x 1) (x−2)( x−4 ) x 2−6 x +8
L1 ( x ) = ∏ = = =
j=0 j ≠1 ( x2− x j) (x 2−x 0 )(x 2−x1 ) (5−2)(5−4) 3
Sustituir en el polinomio y simplificar
x2 −9 x+20 x 2−7 x+ 10 x 2−6 x +8 −7 2 15 16
p2 ( x ) =5 ( 6
+6 ) (
−2
+3
3 ) ( =
6
x + x−
2 )
3
Se puede verificar que este polinomio incluye a los tres puntos dados.
Si únicamente se desea evaluar el polinomio de interpolación, entonces no es necesario
obtener las expresiones algebraicas L1(x). conviene sustituir desde el inicio el valor de x para
obtener directamente el resultado numérico.
Ejemplo
Dado los siguientes puntos (2,5), (4,6), (5, 3)
Con la formula de lagranje, evalue en x=3, el polinomio de interpolación que incluye a estos
tres puntos dados.
2
p2 (3) ∑ f i Li (3)=f 0 L0 (3)+f 1 L1 ( 3 )+ f 2 L2(3)=5 L0 (3)+6 L1 (3)+3 L2(3)
i=0
2
(3−xi )
L1 ( x ) = ∏ ,i=0 ,1 , 2
j=0 j ≠1 ( xi −x j )
2
(3− xi ) (3−x i )(3−x 2) (3−4)(3−5) 1
L0 ( 3 ) = ∏ = = =
j=0 j ≠0 (x 0 − x j ) (x 0−x 1 )(x1 −x2 ) (2−4)(2−5) 3
2
(3−x i) (3−x 0)(3−x 2) (3−2)(3−5)
L1 ( 3 ) = ∏ = = =1
j=0 j ≠1 (x i −x j ) (x i−x 0)( x 1−x 2) ( 4−2)(4−5)
2
(3−x i) (3−x 0)(3−x 1) (3−2)(3−4) −1
L1 ( 3 ) = ∏ = = =
j=0 j ≠1 (x 2 −x j ) (x 2−x 0)( x 2−x 1) (5−2)(5−4) 3
Finalmente se sustituyen los valores dados de f
p2 (3 )=5 ( 13 )+ 6 (1) +3 (−13 )=20/3
Ejemplo
Use la función Lagrange para el ejemplo anterior:
>> x=[2,4,5]; datos
>>f=[5,6,3];
>>p = lagrange (x,f) obtención del polinomio de interpolación
P=
-7/6*t^2+15/2*t-16/3
>> r= lagrange(x,f,4); evaluar p en un punto dado
r=
>>r =lagrange (x,f, 4.25); evaluar p en un punto desconocido
r=
5.4687
>>plot(x,f, “o”), grid on graficar los puntos
>>hold on, ezplot(p,[2,5]) graficar el polinomio sobre puntos
Encuentre el valor de x para el cual p(x)=4:
>>g=p-4 (ecuación que debe resolverse: g(x)= p(x)-4=0)
g=
-7/6*t^2+15/2*t-28/3
>>s=eval(solve(g)) (obtener la solución con un método MATLAB)
S=
4.7413
1.6873
Encuentre el valor máximo de p(x):
>> p= lagrange(x,f)
P=
-7/6*t^2+15/2*t-16/3
>>g=diff(g) (ecuación que debe resolverse: g(x)=p´(x)=0)
g=
-7/3*t+15/2
>>t=eval(solve(g)) (obtener la solución con un metodo MATLAB)
t=
3.2143
>>r= lagrange(x,f,t)
r=
6.7202 (coordenadas del máximo (t,r))
Interpolación múltiple
Se puede extender la interpolación a funciones de más variables. El procedimiento consiste en
interpolar en una variable, fijando los valores de las otras variables y luego combinar los
resultados. En esta sección se usará el polinomio de lagrange en un ejemplo que contiene
datos de una función que depende de dos variables. No es de interés encontrar la forma
analítica del polinomio de interpolación que tendría términos con más de una variable.
Ejemplo
Se tienen tabulados los siguientes datos f(x,y) de una función f que depende de las variables
independientes x,y. se deben usar todos los datos disponibles para estimar mediante
interpolación polinomial el valor de f (3,12)
Primero interpolamos para x=3 con los datos de cada columna y= 5,10,15,20. Debe usarse un
polinomio de segundo grado pues hay tres datos en la dirección x:
2
p2 ( x) ∑ f i Li ( x ) =f 0 L0 ( x ) + f 1 L1 ( x ) + f 2 L2 ( x ) ;
i=0
2
( x−x i)
L1 ( x ) = ∏ ,i=0 ,1 , 2
j=0 j ≠1 ( xi −x j )
No se requiere la forma algebraica. Se sustituye directamente el valor para interpolar x=3.
2
(3−x j ) (3−x i )(3−x 2 ) (3−4)(3−6) 3
L0 ( 3 ) = ∏ = = =
j=0 j ≠0 (x 0 − x j ) (x 0−x 1 )(x 0−x 2) (2−4)(2−6) 8
2
(3−x j) (3−x i)(3−x 2) (3−2)(3−6) 3
L1 ( 3 ) = ∏ = = =
j=0 j ≠0 (x 1 −x j ) (x 1−x 0)( x 1−x 2) ( 4−2)(4−6) 4
2
(3−x j) (3−x 0)(3−x 1) (3−2)(3−4) −1
L2 ( 3 ) = ∏ = = =
j=0 j ≠0 (x 1 −x j ) (x 2−x 0)( x 2−x 1 ) ( 6−2)(6−4 ) 8
Polinomio de interpolación para cada columna y=5, 10, 15, 20:
p2 (3 )=f 0 L0 ( 3 ) + f 1 L1 (3 )+ f 2 L2 ( 3 ) =f 0 (3 /8)+ f 1 (3/ 4)+f 2 (−1/8)
Los valores de L1 (3) son los mismos para cada columna y:
Se sustituyen los valores de cada columna
Y=5 : p2 (3)= 3.7(3/8)+4.1(3/4)+5.6(-1/8)=3.7625
Y=10: p2 (3)= 4.2(3/8)+5.3(3/4)+6.7(-1/8)=4.7125
Y=15 : p2 (3)= 5.8(3/8)+6.1(3/4)+7.4(-1/8)=5.8250
Y=20 : p2 (3)= 7.1(3/8)+7.9(3/4)+8.2(-1/8)=7.5625
Con los cuatro resultados se interpola en y=12 con un polinomio de tercer grado:
3
p3 ( y ) ∑ f i Li ( y )=f 0 L0 ( y ) + f 1 L1 ( y )+ f 2 L2 ( y ) ;
i=0
3
( y− y i)
L1 ( y ) = ∏ ,i=0 ,1 , 2, 3
j=0 j≠ 1 ( y i − y j )
Se sustituye directamente el valor para interpolar con la otra variable: y=12
2
(12− y j ) (12− y 1)(12− y 2)(12− y 2) (12−10)(12−15)(12−20) −8
L0 (12 )= ∏ = = =
j=0 j≠ 0 ( y 0 − y j ) ( y 0− y 1 )( y 0− y 2 )( y 0− y 3 ) (5−10)(5−15)(5−20) 125
3
(12− y 0 ) (12− y 0 )(12− y 2 )(12− y 3 ) (12−5)(12−15)(12−20) 84
L1 ( 12 ) = ∏ = = =
j=0 j ≠ 0 ( y 1− y 0) ( y 1− y 0)( y 1− y 2)( y 1− y 3) (10−5)(10−15)(10−20) 125
3
(12− y j) (12− y 0)(12− y 1)(12− y 3) (12−5)(12−10)(12−20) 56
L2 ( 12 ) = ∏ = = =
j=0 j ≠ 0 ( y 2 − y j ) ( y 2− y 0 )( y 2− y 1 )( y 0− y 3 ) (1 5−5)(15−10)( 15−20) 125
3
(12− y j) (12− y 0)(12− y 1)(12− y 2) (12−5)(12−10)(12−15) −7
L3 (12 ) = ∏ = = =
j=0 j≠ 0 ( y 2− y j ) ( y 3− y 1 )( y 3− y 1 )( y 3− y 2 ) (20−5)(20−10)(20−15) 125
Resultado final:
Y=12: p3 ( 12 )=f 0 L0 ( 12 )+ f 1 L1 ( 12 ) +f 2 L2 ( 12 ) + f 3 L3 ( 12 )
=(3.7725)(-8/125)+(4.7125)(84/125)+(5.8250(56/125)+(7.5625)(-7/125)=5.1121
F(3,12)= 5.1121
EN MATLAB
Para interpolar en dos o más variable, se puede usar la función lagrange para interpolar en una variable.
Al aplicarla en cada dirección se obtienen los resultados parciales. Interpolando con estos resultados
producirá el resultado final.
Para el ejemplo anterior:
>>x =[2, 4, 6]; interpolaciones parciales en x para cada columna de y
>>f=[3.7, 4.1, 5.6];
>>r1= lagrange(x,f,3);
>>f=[4.2, 5.3, 6.7];
>>f=[5.8, 6.1, 7.4];
>>r3= lagrange (x,f, 3);
>>y=[5, 10, 15, 20]; interpolación en y con los resultados parciales
>>f=[r1,r2,r3,r4];
>>p=lagrange(y, f, 12)
P= 5.1121 resultado final