Monday, May 27, 2013

Lagrange interpolation algorithm in Matlab

Lagrange interpolation algorithm in Matlab :

function [yy]=interpola_lagrange(x,y,xx)
% Syntaxis: [yy]=interpola_lagrange(x,y,xx)
% ----------------------------------------------------------------------
% Devuelve el valor interpolado yy en un determinado punto xx solicitado 
% mediante el metodo de interpolacion de Lagrange.
%
% Entrada:
% x  --> Vector que contiene las abcisas de los nodos de interpolacion 
% y  --> Vector que contiene las ordenadas de los nodos de interpolacion
% xx --> Abcisa del nodo que se desea incorporar 
%         
%
% Salida: 
% yy --> Valor interpolado para el nodo con abcisa xx
%
%
% Ejemplo:
% 
% x=[1; 2; 4]; y=[2; 3; 1]; xx=2.5;
% [yy]=interpola_lagrange(x,y,xx)
%
% yy =
%      3
%
%
% Ver tambien: interpola_newton
%
% ----------------------------------------------------------------------
%
% Elaborado por:
%
% Msc. Alexeis Comanioni Guerra
% Lic. Vianka Orovio Cobo
%
% Revision: 1.0 
% Fecha: 30/09/2007


%% Validación de las entradas
if nargin<3
    error('Verifique los datos de entrada.');
end

if min(size(x))>1 || min(size(y))>1
    error('Tanto x como y deben ser vectores.');
else
    x=x(:); y=y(:);
    n=length(x);
end

if sum(size(xx))~=2
   error('La abcisa del nodo de entrada debe ser un escalar.'); 
end

%% Creación de los polinomios de Lagrange
U=ones(n-1,1); 
for i=1:n
    x_temp=x; 
    x_temp(find(x_temp==x_temp(i)))=[];
    L(i)=prod( xx*U-x_temp ) / prod( x(i)*U-x_temp );
end

%% Obtencion del valor interpolado
yy=dot(y,L);

No comments:

Post a Comment