El método de interpolación de Newton con diferencias divididas es uno de los métodos para encontrar el polinomio de grado n−1 que pasa por n puntos. El uso de diferencias divididas nos permite calcular varias versiones del polinomio deseado. Este método utiliza los puntos dados de forma incremental para obtener en cada paso un polinomio interpolante.
La ecuación obtenida de ajustar el polinomio puede desarrollarse en forma secuencial para versiones de orden mayor con la adición de un solo término a la siguiente ecuación de orden inferior. Al agregarse nuevos términos en forma secuencial se puede determinar cuando se alcanza un punto de disminución de regreso, es decir, cuando la adición de términos de orden superior ya no mejora de manera significativa la estimación, o en otras situaciones la aleja.
En la práctica es muy frecuente que los ingenieros obtengan por muestro o experimentación una serie de datos {(𝑥𝑖 , 𝑦𝑖 ), 𝑖 = 0,1,2, … , 𝑛}, sin embargo, al querer estimar valores intermedios entre los datos obtenidos, no se cuenta con una expresión analítica 𝑓(𝑥) que le permita realizar dicha proyección .
La interpolación polinomial consiste en determinar un polinomio único 𝑃(𝑥) de n- ésimo grado que pase por los 𝑛 + 1 puntos medidos. A este polinomio se le conoce como polinomio interpolante.
Seudo-código
En el siguiente seudo-código para los subíndices que dan la ubicación del elemento en una matriz o vector se utilizaron los paréntesis.
function Coeficientes_Netown (px,py)
tam=size(px)
n=tam1
tabla=zeros(n, n+1)
fila_1_de_tabla=px
fila__de_tabla=px
b11=tabla12
for j=3: n+1
for i=j-1: n
tabla (i,j)= (tabla (i,j-1)-tabla(i-1,j-1))/(tabla (i,1)-tabla (i-j+2, 1)
if i==j-1
b(i,1)=tabla(i,j)
end if
end for
end for
define x as variable
puntosx=(px)^T
for c=2:n
mult=1
for d=c:-1:c-1
polinomio (1,c)=mult*polinomio(1,d)
mult=polinomio(1,c)
end for
end for
btrans=(b)^T
PoliNew=dot(b,polinomio)
return PoliNew
end function
Código
function [PoliNew]=Coeficientes_Newton(px,py)
tam=size(px);
n=tam(1);
tabla=zeros(n,n+1);
tabla(:,1)=px;
tabla(:,2)=py;
b(1,1)=tabla(1,2);
for j=3:n+1
for i=j-1:n
tabla(i,j)=(tabla(i,j-1)-tabla(i-1,j-1))/(tabla(i,1)-tabla(i-j+2,1));
if i==j-1
b(i,1)=tabla(i,j);
end
end
end
syms x
puntosx=px';
for a=2:n
polinomio(1,a)=x-puntosx(1,a-1);
end
polinomio(1,1)=1;
for c=2:n
mult=1;
for d=c:-1:c-1
polinomio(1,c)=mult*polinomio(1,d);
mult=polinomio(1,c);
end
end
btrans=b';
PoliNew=dot(b,polinomio);
end