PRÁCTICA 11. MÉTODO DE DIFERENCIAS DIVIDIDAS DE NEWTON OBJETIVO.
Se realizará a través de lenguaje C un programa para la interpolación de a través del método diferencias divididas de Newton. INTRODUCCIÓN.
Esta es una manera diferente de hacer los cálculos para la interpolación polinómica. En la interpolación de Lagrange se construye explícitamente p, es decir, se conocen sus coeficientes. Por medio de las diferencias divididas no se tiene explícitamente el polinomio, pero se puede obtener fácilmente el valor p(x) para cualquier x. Para poder construir el polinomio se necesitan los siguientes coeficientes b 0(x ) = f(x0), b 1(x) = f[x1, x0], b 2(x) = f[x2, x1, x0], b 3(x) = f[x3, x2, x1, x0], … b n(x) = f[xn, …, x0],
y el polinomio queda de la siguiente manera f x b0
b1 x x0 b2 x x0 x x1 bn x x0 x x1 x xn
Para calcular los coeficientes
b0 , b1 ,, bn
tabla de diferencias divididas como la siguiente:
52
1
, es conveniente construir una
Ejemplo. Calcular la tabla de diferencias divididas finitas con los siguientes datos:
Y utilizar la información de dicha tabla, para construir el polinomio de interpolación de Newton.
Solución.
Procedemos como sigue:
Por lo tanto el polinomio de interpolación de Newton es: f ( x) 4 2( x 2) 0.25( x 2)( x 1) 0.3( x 2)( x 1)( x 2)
53
DESARROLLO.
#include
if(k==(j+k))
#include
coef[k+1]=b[j];
void newtonp(){
}
int n,i,j,k;
printf("\n");
printf("Numero de datos\n");
}
scanf("%d",&n);
printf("\n");
float a[n];
for(k=0;k
float b[n];
printf("%f\t",coef[k]);
float copiab[n];
float res,x,eval;
float coef[n];
/*printf("¿en
for(i=0;i
evaluar?");
printf("Valores de X%i\n",i);
scanf("%f",&x);*/
scanf("%f",&a[i]);
x=5.2;
}
eval=coef[0];
for(i=0;i
for(i=1;i
printf("Valores de y%i\n",i);
res=coef[i];
scanf("%f",&b[i]);
for(j=0;j
}
res=res*(x-a[j]);
coef[0]=b[0];
eval=eval+res;
for(k=0;k
}
for(j=0;j
printf("el valor de f(x) cuando x=%f es
if(k==(j+k)){
%f\n",x,eval);
for(i=0;i
}
copiab[i]=b[i];
int main(){
}
newtonp();
b[j]=(copiab[j+1]-copiab[j])/(a[j+(1+k)]-
system("pause");
a[j]);
return 0;
printf("%f\t",b[j]);
}
54
que
punto
quiere
CASO DE ESTUDIO.
CONCLUSIÓN.
El método de interpolación por diferencias divididas de Newton es el que más me parece apropiado para la hacer una interpolación ya que es más exacto que el de Lagrange.
55
PRÁCTICA 12. INTERPOLACIÓN DE LAGRANGE. OBJETIVO.
Se realizará a través de lenguaje C un programa para la interpolación de a través del método interpolación de Lagrange. INTRODUCCIÓN.
En la interpolación de Lagrange la función f que pasa por los puntos es un polinomio, pero el polinomio se calcula utilizando polinomios de Lagrange, sin resolver explícitamente un sistema de ecuaciones. Teóricamente, el polinomio obtenido por interpolación polinomial (solución de un sistema de ecuaciones) es exactamente el mismo obtenido por interpolación de Lagrange. Dados n puntos (x1, y1), (x2, y 2), . . . , (x n, y n), donde yi = f(xi) = fi, se desea encontrar un polinomio p
∈
Pn−1 (el conjunto de polinomios de grado menor o igual a n−1), que pase
exactamente por esos puntos, es decir, p (xi) = yi , i = 1, 2, ..., n .
Construcción del polinomio de Lagrange Dados n valores diferentes x 1, x2,..., xn, se definen n polinomios de Lagrange L 1,L2, ...,Ln de la siguiente manera:
(5.1) La construcción de los polinomios de Lagrange, para los datos del último ejemplo x1 = −1, x2 = 2, x3 = 3, da:
56
Es claro que el numerador de (5.1) e s el producto de n − 1 polinomios de grado 1; entonces el numerador es un polinomio de grado, exactamente, n − 1. El denominador es el producto de n − 1 números, ninguno de los cuales es nulo,
luego el denominador es un numero no nulo. En resumen, L k es un polinomio de grado n − 1.
Con los polinomios de Lagrange se construye inmediatamente p,
Por construcción p es un polinomio en P n−1. Para el ejemplo,
DESARROLLO.
#include
for(i=0;i
#include
printf("Valores de y%i\n",i);
void lagrange(){
scanf("%f",&b[i]);
int n,i,j;
}
printf("Numero de datos\n");
float res,x,eval;
scanf("%d",&n);
printf("¿en
float a[n];
evaluar?");
float b[n];
scanf("%f",&x);
for(i=0;i
eval=0;
printf("Valores de X%i\n",i);
for(i=0;i
scanf("%f",&a[i]);
res=b[i];
}
for(j=0;j
57
que
punto
quiere
if(i!=j)
}
res=res*((x-a[j])/(a[i]-a[j]));
int main(){
}
lagrange();
eval=eval+res;
system("pause");
}
return 0;
printf("el valor de f(x) cuando x=%f es
}
%f\n",x,eval); CASO DE ESTUDIO.
58