Diferencias Divididas de Newton

9
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(x 0 ), b 1 (x) = f[x 1 , x 0 ], b 2 (x) = f[x 2 , x 1 , x 0 ], b 3 (x) = f[x 3 , x 2 , x 1 , x 0 ], b n (x) = f[x n , …, x 0 ], y el polinomio queda de la siguiente manera 1 1 0 1 0 2 0 1 0 n n x x x x x x b x x x x b x x b b x f 52

Transcript of Diferencias Divididas de Newton

Page 1: Diferencias Divididas de Newton

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

b0(x) = f(x0),

b1(x) = f[x1, x0],

b2(x) = f[x2, x1, x0],

b3(x) = f[x3, x2, x1, x0],

bn(x) = f[xn, …, x0],

y el polinomio queda de la siguiente manera

110102010 nn xxxxxxbxxxxbxxbbxf

Para calcular los coeficientes nbbb ,,, 10 , es conveniente construir una

tabla de diferencias divididas como la siguiente:

 

52

Page 2: Diferencias Divididas de Newton

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:

  )2)(1)(2(3.0)1)(2(25.0)2(24)( xxxxxxxf

53

Page 3: Diferencias Divididas de Newton

DESARROLLO.

#include<stdio.h>

#include<stdlib.h>

void newtonp(){

int n,i,j,k;

printf("Numero de datos\n");

scanf("%d",&n);

float a[n];

float b[n];

float copiab[n];

float coef[n];

for(i=0;i<n;i++){

printf("Valores de X%i\n",i);

scanf("%f",&a[i]);

}

for(i=0;i<n;i++){

printf("Valores de y%i\n",i);

scanf("%f",&b[i]);

}

coef[0]=b[0];

for(k=0;k<n;k++){

for(j=0;j<n-(1+k);j++){

if(k==(j+k)){

for(i=0;i<n;i++)

copiab[i]=b[i];

}

b[j]=(copiab[j+1]-copiab[j])/(a[j+(1+k)]-

a[j]);

printf("%f\t",b[j]);

if(k==(j+k))

coef[k+1]=b[j];

}

printf("\n");

}

printf("\n");

for(k=0;k<n;k++)

printf("%f\t",coef[k]);

float res,x,eval;

/*printf("¿en que punto quiere

evaluar?");

scanf("%f",&x);*/

x=5.2;

eval=coef[0];

for(i=1;i<n;i++){

res=coef[i];

for(j=0;j<i;j++)

res=res*(x-a[j]);

eval=eval+res;

}

printf("el valor de f(x) cuando x=%f es

%f\n",x,eval);

}

int main(){

newtonp();

system("pause");

return 0;

}

54

Page 4: Diferencias Divididas de Newton

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

Page 5: Diferencias Divididas de Newton

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, y2), . . . , (xn, yn), 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 x1, x2,..., xn, se definen n polinomios de Lagrange

L1,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

Page 6: Diferencias Divididas de Newton

Es claro que el numerador de (5.1) es 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, Lk es un polinomio de

grado n − 1.

Con los polinomios de Lagrange se construye inmediatamente p,

Por construcción p es un polinomio en Pn−1.

Para el ejemplo,

DESARROLLO.

#include<stdio.h>

#include<stdlib.h>

void lagrange(){

int n,i,j;

printf("Numero de datos\n");

scanf("%d",&n);

float a[n];

float b[n];

for(i=0;i<n;i++){

printf("Valores de X%i\n",i);

scanf("%f",&a[i]);

}

for(i=0;i<n;i++){

printf("Valores de y%i\n",i);

scanf("%f",&b[i]);

}

float res,x,eval;

printf("¿en que punto quiere

evaluar?");

scanf("%f",&x);

eval=0;

for(i=0;i<n;i++){

res=b[i];

for(j=0;j<n;j++){

57

Page 7: Diferencias Divididas de Newton

if(i!=j)

res=res*((x-a[j])/(a[i]-a[j]));

}

eval=eval+res;

}

printf("el valor de f(x) cuando x=%f es

%f\n",x,eval);

}

int main(){

lagrange();

system("pause");

return 0;

}

CASO DE ESTUDIO.

58