You are on page 1of 9

Universidad Nacional Autnoma de Mxico

Facultad de Ingeniera

Lab. Programacin Avanzada y Mtodos Numricos

Prctica 7: Interpolacin Numrica

Pulido Gmez Cristian Alexis

Gpo. Teora: 05

Programa 1
#define n 10
main()
{
int i,j,grado;
double a[n][2],L=1.0L;
double fdex=0.0L,x;
printf("\n Interpolacion de Lagrange.");
printf("\n Dame el grado del polinomio.\n El grado es igual al numero de pares de puntos-1:
");
scanf("%i",&grado);
printf("\n");
for(i=0;i<=grado;i++)
for(j=0;j<2;j++)
{
if(j==0)
{printf("x%i = ",i);}
else
{printf("f(x%i) = ",i);}
scanf("%lf",&a[i][j]);
}
printf("\n\n Dame un valor a evaluar: ");
scanf("%lf",&x);
printf("\n\n La tabla de valores es: \n");
printf("\n xi\t f(xi)\n");
for(i=0;i<=grado;i++)
{
for(j=0;j<2;j++)
{printf(" %lf ",a[i][j]);}
printf("\n");
}
for(i=0;i<=grado;i++)
{
L=1.0L;
for(j=0;j<=grado;j++)
{
if(i!=j)

{L=((x-a[j][0])/(a[i][0]-a[j][0]))*L;}
}
fdex+=L*a[i][1];
}
printf("\n\n f(%lf) = %lf",x,fdex);
getch();
return 0;
}

Programa 2
#include<stdio.h>
#define n 4
main()
{
int i,j;
double a[n][2],L=1.0L;
double fdex=0.0L,x;
FILE *f;
f=fopen("ilagrange.txt","r");
for(i=0;i<n;i++)
for(j=0;j<2;j++)
fscanf(f,"%lf",&a[i][j]);
fclose(f);
printf("\n Interpolacion de Lagrange.");
printf("\n\n Dame un valor a evaluar: ");
scanf("%lf",&x);
for(i=0;i<n;i++)
{
L=1.0L;
for(j=0;j<n;j++)
{
if(i!=j)
{L=((x-a[j][0])/(a[i][0]-a[j][0]))*L;}
}
fdex+=L*a[i][1];

}
printf("\n\n f(%lf) = %lf",x,fdex);
getch();
return 0;
}
Programa 3
#define n 10
#define tol 0.000001
void mceros(int,double[][]);
void imatriz(int,double[][]);
void ipolinomio(int,double[][]);
double evalua(int,double[][],double);
void mceros(int t,double a[t][t+1])
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<t+1;j++)
a[i][j]=0.0;
}
void imatriz(int t,double a[n][n+1])
{
int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<=t-i;j++)
{printf(" %lf ",a[i][j]);}
printf("\n");
}
}
void ipolinomio(int t,double a[n][n+1])
{
int j,k,i=0;
for(j=0;j<t;j++)
{

i=0;
printf(" +%.2lf",a[0][j+1]);
for(k=t-j;k<t;k++)
{printf("(x-%.2lf)",a[i][0]);i++;}
}
}
double evalua(int t,double a[n][n+1],double x)
{
int i,j,k;
double fdex=0.0L,mult=1.0L;
for(i=0;i<t;i++)
{
k=0;
mult=1.0L;
for(j=t-i;j<t;j++)
{
mult=(x-a[k][0])*mult;
k++;
}
mult=a[0][i+1]*mult;
fdex+=mult;
}
return fdex;
}
main()
{
double a[n][n+1],e,x;
int i,j,k,grado;
mceros(n,a);
printf("\n Metodo de diferencias divididas de Newton.");
printf("\n Dame el grado del polinomio.\n El grado es igual al numero de pares de puntos-1:
");
scanf("%i",&grado);
printf("\n");
for(i=0;i<=grado;i++)
for(j=0;j<2;j++)
{
if(j==0)

{printf("x%i = ",i);}
else
{printf("f(x%i) = ",i);}
scanf("%lf",&a[i][j]);
}
/* Mi metodo: */
for(i=0;i<=grado-1;i++)
{
for(j=0;j<grado-i;j++)
{
a[j][i+2]=(a[j+1][i+1]-a[j][i+1])/(a[j+1+i][0]-a[j][0]);
if(fabs(a[j][i+2])<=tol)
a[j][i+2]=0.0L;
}
}
printf("\n\n");
imatriz(grado+1,a);
printf("\n\n El polinomio es: \n f(x) = ");
ipolinomio(grado+1,a);
printf("\n\n Numero a evaluar: ");
scanf("%lf",&x);
e=evalua(grado+1,a,x);
printf("\n f(%lf)= %lf",x,e);
getch();
return 0;
}
Programa 4
#include<stdio.h>
#define n 4
#define tol 0.000001
void mceros(int,double[][]);
void imatriz(int,double[][]);
void ipolinomio(int,double[][]);
double evalua(int,double[][],double);
void mceros(int t,double a[t][t+1])

{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<t+1;j++)
a[i][j]=0.0;
}
void imatriz(int t,double a[t][t+1])
{
int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<=t-i;j++)
{printf(" %lf ",a[i][j]);}
printf("\n");
}
}
void ipolinomio(int t,double a[t][t+1])
{
int j,k,i=0;
for(j=0;j<n;j++)
{
i=0;
printf(" +%.2lf",a[0][j+1]);
for(k=n-j;k<n;k++)
{printf("(x-%.2lf)",a[i][0]);i++;}
}
}
double evalua(int t,double a[t][t+1],double x)
{
int i,j,k;
double fdex=0.0L,mult=1.0L;
for(i=0;i<n;i++)
{
k=0;
mult=1.0L;
for(j=n-i;j<n;j++)
{
mult=(x-a[k][0])*mult;

k++;
}
mult=a[0][i+1]*mult;
fdex+=mult;
}
return fdex;
}
main()
{
double a[n][n+1],e,x;
int i,j,k;
FILE *f;
mceros(n,a);
f=fopen("inewton.txt","r");
for(i=0;i<n;i++)
{
for(j=0;j<2;j++)
{
fscanf(f,"%lf",&a[i][j]);
}
}
fclose(f);
/* Mi metodo: */
for(i=0;i<n-2;i++)
{
for(j=0;j<n-1-i;j++)
{
a[j][i+2]=(a[j+1][i+1]-a[j][i+1])/(a[j+1+i][0]-a[j][0]);
}
} /* por alguna extraa razon, mi metodo no necesita de tol */
/* El metodo de la practica:
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
a[j][i+1]=(a[j+1][i]-a[j][i])/(a[j+i][0]-a[j][0]);
if(fabs(a[j][i+1])<=tol)

a[j][i+1]=0.0L;
}
}*/
printf("\n\n");
imatriz(n,a);
printf("\n\n El polinomio es: \n f(x) = ");
ipolinomio(n,a);
printf("\n\n Numero a evaluar: ");
scanf("%lf",&x);
e=evalua(n,a,x);
printf("\n f(%lf)= %lf",x,e);
getch();
return 0;
}

You might also like