拉格朗日插值法实验报告
拉格朗日插值法实验报告
一、实验目的
1、学习和掌握拉格朗日插值多项式。
2、运用拉格朗日插值多项式进行计算。
二、算法步骤
函数定义
double lgrr(int n,double X)
输入
所求节点x和已知的节点数n
输出
插值结果s
步骤:
1、 输入n对数(x[i],y[i])(i=0--n)
2、 令s=0
3、 对于 i=0-n T=y[i]
对j=0- n但j!=i T=T*(X-x[j])/(x[i]-x[j])
令s=s+T
4、输出结果
三 流程图
四、原程序
#include
main()
{
double X;
int n;
double lgrr(int n,double X);
printf("input the aim number'X' ");
printf("input the number of pairs of numbers 'n':");
scanf("%lf%d",&X,&n);
lgrr(n,X);
return 0;
}
double lgrr(int n,double X)
{
double s=0,t;
double x[81],y[81];
int i,j;
printf("input n pairs of numbers:\n");
for(i=0;i
scanf("%lf%lf",&x[i],&y[i]);
for(i=0;i
{
t=y[i];
for(j=0;j
{if(j!=i)
t=t*(X-x[j])/(x[i]-x[j]);}
s=s+t;
}
printf("s=%f\n",s);
return 0;
}
作业用程序
#include
main()
{
double X;
int n;
double lgrr(int n,double X);
printf("input the aim number'X' ");
printf("input the number of pairs of numbers 'n':"); scanf("%lf%d",&X,&n);
lgrr(n,X);
return 0;
}
double lgrr(int n,double X)
{
FILE *fp;
double s=0,t,z;
double x[81],y[81];
int i,j,k;
if((fp=fopen("lgrr.txt","r+"))==NULL) printf("can not open the file.");
printf("input n pairs of numbers:\n"); for(i=0;i
scanf("%lf%lf",&x[i],&y[i]);
for(k=0;k
{for(i=0;i
{
z=X+.01*k;
t=y[i];
for(j=0;j
{if(j!=i)
t=t*(z-x[j])/(x[i]-x[j]);}
s=s+t;
}
printf("s=%f\n",s);
fprintf(fp,"s=%f\n",s);
}
return 0;
}
五、作业:
3-27
s=0.198670
s=0.407105
s=0.625307
s=0.853266
s=1.090966
s=1.338384
s=1.595493
s=1.862263
s=2.138663
s=2.424661
s=2.720224
s=3.025321
s=3.339921
s=3.663993
s=3.997507
s=4.340430
s=4.692730
s=5.054371
s=5.425314
s=5.805512
s=6.194912