Está en la página 1de 8

INTERPOLACIN

(02 de Octubre del 2013)

ALUMNO:

RODRGUEZ MEZA, JACK

PROFESOR:

MACO VASQUEZ, WILSON

CURSO:

ANALISIS NUMERICO

ESCUELA:

FSICA

2013

I.

Evaluacin de Polinomio interpolador de Vandermonde

En clase se mencionaron 3 mtodos para interpolar y evalular un polinomio. Vamos a


exminar estos mtodos en mas detalle partiendo de sus cdigos implementado en
MATLAB. Recordando que supodemos que el polinomio esta dado por

p ( x )=a1 +a2 x++an x n1 .


Mtodo 1
Programa 01
function a = interpV(x,y)
%% a=interpV(x,y) <- Calcula el polinomio interpolador de Vandermonde, donde:
% DATOS DE ENTRADA
% x = vector columna de n-componentes distintos
% y = vector columna de n-componentes distintos
% DATOS DE SALIDA
% a es un vector columna de n-dimensiones con la propiedad de que:
%
Si:
p(x) = a(1) + a(2)x + ... a(n)x^(n+1)
% entonces:
%
p(x(i)) = y(i), i=1:n
n = length(x);
V = ones(n,n);
for j=2:n
V(:,j) = x.*V(:,j-1);
end
a = V\y;
end

Ejemplo: Sean los datos:

-3

11

Determinar el polinomio de Vandermonde que interpola esos puntos.


Solucin:
Tipeando los datos de la tabla en forma matricial, desde el Matlab:
>> x=[4 5 6 7]'; y=[-3 11 0 3]';
Ejecutando el siguiente cdigo:
>> a = interpV(x,y)
a=
1.0e+003 *

-1.0890
0.6075
-0.1100
0.0065
De modo que el polinomio de Vandermonde, ser:

y ( x )=103 (1.0890+0.6075 x0.1100 x 2 +0.0065 x 3 )


Mtodo 2
Programa 02:
function pVal = hornerV(a,z)
%% pVal = hornerV(a,z) <-- Evala el polinomio interpolador de Vandermonde en
el punto z, donde:
% DATOS DE ENTRADA
% a = vector columna de n-dimensiones
% z = punto donde se evala el Polinomio usando mtodo de Horner
% DATOS DE SALIDA
% pVal = valor obtenido por la interpolacin de Vandermonde
%
p(x) = a(1) + .. + a(n)x^(n+1)
% entonces:
%
pVal(i) = p(z(i)) , i=1:m.
n = length(a);
m = length(z);
pVal = a(n)*ones(size(z));
for k=n-1:-1:1
pVal = z.*pVal + a(k);
end

Ejemplo: Sea el polinomio de Vandermonde:

p ( x )=1+ 4 x+ 11 x 27 x 3 +6 x 4
Evaluar el polinomio para x = -3.
Solucin:
Tipeando los datos de la tabla en forma matricial, desde el Matlab:
>> a=[-1 4 11 -7 6]; z=-3;
>> pVal = hornerV(a,z)

pVal =
761

valor interpolado para p(x = - 3)

Programa 03:
function interpol
clc; clear; hold on
x=[-2 -1 1 2]'; y=[10 4 6 3]';
plot(x,y,'r')
a=interpV(x,y);
x0=linspace(-2.1,2.1,100)';
y0=hornerV(a,x0);
% Grfica del polinomio de interpolacin
plot(x0,y0); xlabel('x'); ylabel('p(x)');
title('Polinomios de interpolacin');
legend('Polinomio interpolante de Vandermonde','Polinomio segn mtodo de
Horner')
end

Ejemplo:
Al ejecutar el programa 03, obtenemos
Polinomios de interpolacin

12

Polinomio interpolante de Vandermonde


Polinomio segn mtodo de Horner

11
10
9

p(x)

8
7
6
5
4
3
2
-2.5

-2

-1.5

-1

-0.5

0
x

0.5

1.5

2.5

Mtodo 3
Programa 04:

PROGRAMA PRINCIPAL

function interpolacion
clc; clear; hold on
x=[-2 -1 1 2]'; y=[10 4 6 3]';
plot(x,y,'r')
c=interpN(x,y);
x0=linspace(-2.1,2.1,100)';
y0=hornerN(c,x,x0);
% Grfica del polinomio de interpolacin
plot(x0,y0); xlabel('x'); ylabel('p(x)');
title('Polinomios interpolantes de Newton');
legend('Interpolacin de Newton','Interpolacin por mtodo de Horner')
end

PROGRAMAS SECUNDARIOS

function c = interpN(x,y)
%% c = InterpN(x,y) <- Calcula el polinomio interpolante de Newton, donde:
% DATOS DE ENTRADA
% x = vector columna de n-componentes distintos
% y = vector columna de n-componentes distintos
% DATOS DE SALIDA
% c es un vector columna de n-dimensiones con la propiedad de que:
%
Si:
p(x) = c(1) + c(2)(x-x(1))+...+ c(n)(x-x(1))...(x-x(n-1))
% entonces:
%
p(x(i)) = y(i), i=1:n
n = length(x);
for k = 1:n-1
y(k+1:n) = (y(k+1:n)-y(k))./(x(k+1:n) - x(k));
end
c = y;
function y0 = hornerN(c,x,z)
%% y0 = HornerN(c,x,z) <-- Evalua el Polinomio interpolante de Newton en "z"
% DATOS DE ENTRADA
% c y x son vectores columnas de n-dimensiones
% z = dato donde se evala el polinomio interpolante de Newton
% DATOS DE SALIDA
% y0 = vector columna de la misma dimensin que "z" con la siguiente propiedad:
%
p(x) = c(1) + c(2)(x-x(1))+ ... + c(n)(x-x(1))...(x-x(n-1))
% Entonces:
%
y0(i) = p(z(i)) , i=1:m.
n = length(c);

y0 = c(n)*ones(size(z));
for k=n-1:-1:1
y0 = (z-x(k)).*y0 + c(k);
end

Ejemplo:
Al ejecutar el programa principal 04, obtenemos
Polinomios interpolantes de Newton

12

Interpolacin de Newton
Interpolacin por mtodo de Horner

11
10
9

p(x)

8
7
6
5
4
3
2
-2.5

-2

-1.5

-1

-0.5

0
x

0.5

1.5

2.5

TAREA:
Construir una base de datos para la funcin:

f ( x )=

1
; x [1,1 ]
2
1+25 x

Interpolar y analizar el error de la interpolacin polinomial.


Solucin:
El siguiente programa en MATLAB calcula los polinomios de interpolacin de f(x) de
grados 10, 11, 12 y 13 y los grafica en el mismo sistema de coordenadas junto con
f(x).
function error_interpN
%% Permite obtener las curvas polinomio interpolante con la funcin y(x)
x=linspace(-1,1,100)';

y=1./(1+25*x.^2);
k=0;
for n=10:13
k=k+1;
xunif=linspace(-1,1,n)';
yunif= 1./(1+25*xunif.^2);
cunif=interpN(xunif,yunif);
pvals=hornerN(cunif,xunif,x);
subplot(2,2,k)
plot(x,y,x,pvals)
title(sprintf('(n = %2.0f)',n))
end
end

Al ejecutar el programa error_interpN, obtenemos lo siguiente:

(n = 10)

1
0.5

-0.5
-1

-0.5

0.5

(n = 12)

-1
-1

-2

-0.5

-0.5

0.5

-4
-1

0.5

0.5

(n = 13)

0.5

-0.5
-1

(n = 11)

-0.5

También podría gustarte