You are on page 1of 7

Laboratorio de métodos numéricos Carrera: ingeniería química gp 231

Universidad autónoma de baja california Alumno: Isael Vázquez González


Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte

PRÁCTICA III: INTERPOLACION DE POLINOMIOS

METODO DE DIFERENCIAS DIVIDIDAS DE NEWTON


Esta es una manera diferente de hacer los cálculos para la interpolación polinómica. En
la interpolación de LaGrange se constituye 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 construir el siguiente polinomio se necesitan los siguientes coeficientes


Bo(x)= f(x)
Bi(x) = (x1, x2)
B2(x)= (x2, x1, x0)
B3(x)= (x3, x2, x1, x0)

Bn(x)= (xn……x0)
El polinomio queda de la siguiente manera
F(x)=b0 + b1(x-x0) + b2(x-x0) (x-x1) + b3(x-x0) (x-x1) (x-xn-1) …

Ejemplo: en un laboratorio de fabricación de medicamentos se bebe llevar un control de


la temperatura ambiento donde se almacenan los medicamentos, es bien conocido que
muchos medicamentos son muy sensibles a la temperatura ambiente.

De eta forma se al formado una tabla de valores de la temperatura en el interior de los


almacenes y ciertas horas del día

Midiendo la temperatura ambiente a distintas horas del día hemos obtenido la siguiente
tabla
X 6 8 10 12 14 16 18 20
Hora
f(x) 7 9 12 18 21 19 15 10
Grados

1
Laboratorio de métodos numéricos Carrera: ingeniería química gp 231
Universidad autónoma de baja california Alumno: Isael Vázquez González
Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte
#include <stdio.h>
#include <stdlib.h>
printf("\t%2.7f",F[i][i]);
#include <string.h> // Aqui formar el polinomio y evluarlo

int main() LI=x[0];


{ float F[100][100],mat[100][100]; LS=x[n];
float x[100],f[100]; valx=LI;
float valx,valy,LI,LS,inc,mul; inc=(LS-LI)/100.0;
int i,j,n,z;
for (z=0;z<100;z++)
{
n=7; mat[z][1]=F[0][0];

x[0]=6; for (i=1;i<=n;i++)


x[1]=8; {
x[2]=10; mul=1;
x[3]=12;
for (j=0;j<=i-
1;j++)
x[4]=14;
{
x[5]=16;
x[6]=18; mul=mul*(valx-x[j]);
x[7]=20; }

f[0]=7; mat[z][1]=mat[z][1]+F[i][i]*mul;
f[1]=9;
}
f[2]=12;
mat[z][0]=valx;
f[3]=18; valx=valx+inc;
f[4]=21; }
f[5]=19;
f[6]=15; mat_texto(mat, 100, 2, "salida_xy.txt");
f[7]=10;
return 0;
//Inicializar matriz F y matriz mat
}
for (i=0;i<100;i++)
for (j=0;j<100;j++)
F[i][j]=0;
mat[i][j]=0;

//Paso 1:
Programa principal
for (i=0;i<=n;i++)
F[i][0]=f[i]; for (i=1;i<=n;i++)
for (j=1;j<=i;j++)
F[i][j]=(F[i][j-1]-F[i-
1][j-1])/(x[i]-x[i-j]);

// Paso 2: Salida
for (i=0;i<=n;i++)

2
Laboratorio de métodos numéricos Carrera: ingeniería química gp 231
Universidad autónoma de baja california Alumno: Isael Vázquez González
Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte

void desplegar_matriz(float sl[100][100],int


n) renglon[j][i]=renglon[j][i]/escalar;
{ }

int i,j;
}
for(j=1;j<=n;j++)
for(i=1;i<=n+1;i++) { int mat_texto(float mat[100][100], int rens,
printf("\t%2.2f",sl[j][i]); int cols, char archivo_texto[20])
if (i==n+1) printf("\n"); {
}
printf("\n"); char valor [10];
} FILE *nuevo;
int i,j;
void columna_ceros_pivote_inferior(float
sl[100][100],int j,int n) nuevo =
{ fopen(archivo_texto,"w");
int i,columna;
float escalar; for (i=0;i<rens;i++)
for (j=0;j<cols;j++)
for(i=j+1;i<=n;i++) {
{ memset(valor,'\0',strlen(valor));
{ if ((j==0)&&(i>0))
escalar=sl[i][j]*(-1); {
fprintf(nuevo,"%s","\n");
for(columna=1;columna<=n+1;columna++) }

sl[i][columna]=sl[j][columna]*escalar+sl[i][co
lumna]; sprintf(valor,"%f",mat[i][j]);
}
} fprintf(nuevo,"%s",valor);
}
void columna_ceros_pivote_superior(float if (j<cols-1)
sl[100][100],int j,int n) {
{ fprintf(nuevo,"%s","\t");
int i,columna; }
float escalar;
}
for(i=j-1;i>=1;i--)
{ fclose(nuevo);
{
escalar=sl[i][j]*(-1); return 0;

for(columna=1;columna<=n+1;columna++) }

sl[i][columna]=sl[j][columna]*escalar+sl[i][co
lumna]; • Programas secundarios dentreo del
} programa principal
}
}
void renglon_por_escalar(float
renglon[100][100], float escalar, int n, int j)
{
int i;

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

3
Laboratorio de métodos numéricos Carrera: ingeniería química gp 231
Universidad autónoma de baja california Alumno: Isael Vázquez González
Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte

Grafica de los valores

Figura 1. Datos obtenidos de la interacción del programa

Dentro de la evaluación de los datos del problemas se obtuvieron los valores de

7.000000, 1.000000, 0.125000, 0.041666, -0.020833, 0.003125, -0.0002387


CONCLUCION
el método de interpolación por diferencias divididas de newton es el que parece mas
apropiado para hacer una interpolación ya que es mas exacto que el de LaGrange

4
Laboratorio de métodos numéricos Carrera: ingeniería química gp 231
Universidad autónoma de baja california Alumno: Isael Vázquez González
Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte

INTERPOLACIÓN DE LAGRANGE
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 la
interpolación polinomial (solución de un sistema de ecuaciones) es exactamente el
mimo obtenido por interpolación de LaGrange

Dados n puntos
(x1, y1),(x2,y2)……..(xn,yn) donde yi=f(x)=fi se desea encontrar un polinomio P EPn-
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,3,4….

Ejemplo: para cierto análisis de producción de desea conocer una función que relacione
parámetros de producción en k=1000 y las ventas netas en k=1000

Se formula la siguiente tabla de valores


x 4k 6k 8k 10k
y 8k 6k 4k 2k
Donde 2 será el valor de x para encontrar y

5
Laboratorio de métodos numéricos Carrera: ingeniería química gp 231
Universidad autónoma de baja california Alumno: Isael Vázquez González
Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte

Programa
# include <stdio.h>
# include <conio.h>
# include <malloc.h>
# include <stdio.h>
void lagrange(double x, double X[], double y[], int Lit)
{
int i,j;
double r=0, num=1, den=1;
for(i=0; i<Lit;i++){ //para el total de polinomios
for(j=0; j<Lit;j++){ //para cada polinomio
if (i!=j){ num*=(x - X[j]); den*=(X[i] - X[j] ); }
}
num*=y[i];
printf("Interacion %d valor %lf\n", i, num/den);
getch();
r+=num/den;
num=den=1;
}
printf("\nEl resultado es: %lf", r);
}

void main()
{
int m,i;
double *X,*Y,x;
void clrscr();
printf("cuantas entradas tendra la tabla?\n\t\t");
scanf("%d",&m);
X=(double*)malloc(sizeof(double)*m);
printf("Ingresa la tabla los valores de X:\n");
for(i=0; i<m; i++) scanf("%lf", &X[i]);
printf("\nIngresa la tabla los valores de Y:\n");
Y=(double*)malloc(sizeof(double)*m);
for(i=0; i<m; i++) scanf("%lf", &Y[i]);
printf("Escribe el valor X para el cual se encontrara el valor de Y\n");
scanf("%lf",&x);
lagrange(x, X, Y, m);
getch();
}

6
Laboratorio de métodos numéricos Carrera: ingeniería química gp 231
Universidad autónoma de baja california Alumno: Isael Vázquez González
Facultad de ciencias químicas e ingeniería Prof.: Olivia Mendoza duarte

Figura 2. Datos obtenidos de la interpolación del programa de


LaGrange

Bibliografía:

• https://www.uv.es/diazj/practica6.pd
• https://es.slideshare.net/NovatodelaWeebFoxWeeb/130112719-
diferenciasdivididasdenewtonhttps://www.lawebdelprogramador.com/cod
igo/C-Visual-C/266-Metodo-de-interpolacion-de-Lagrange.html

You might also like