拉格朗日插值法C语言的实现.doc
《拉格朗日插值法C语言的实现.doc》由会员分享,可在线阅读,更多相关《拉格朗日插值法C语言的实现.doc(3页珍藏版)》请在冰豆网上搜索。
实验一.拉格朗日插值法C语言的实现
1.实验目的:
进一步熟悉拉格朗日插值法。
掌握编程语言字符处理程序的设计和调试技术。
2.实验要求:
已知:
某些点的坐标以及点数。
输入:
条件点数以及这些点的坐标。
输出:
根据给定的点求出其对应的拉格朗日插值多项式的值。
3.程序流程:
(1)输入已知点的个数;
(2)分别输入已知点的X坐标;
(3)分别输入已知点的Y坐标;
(4)通过调用函数lagrange函数,来求某点所对应的函数值。
拉格朗日插值多项式如下:
其中
开始
程序流程图:
↓
输入已知点个数n
输入已知点的X坐标以及输入已知点的Y坐标
↓
调用函数lagrange函数
↓
输出结果
↓
程序如下:
#include
#include
#include
floatlagrange(float*x,float*y,floatxx,intn)/*拉格朗日插值算法*/
{
inti,j;
float*a,yy=0.0;/*a作为临时变量,记录拉格朗日插值多项式*/
a=(float*)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
{
a[i]=y[i];
for(j=0;j<=n-1;j++)
if(j!
=i)a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
free(a);
returnyy;
}
intmain()
{
inti;
intn;
floatx[20],y[20],xx,yy;
printf("Inputn:
");
scanf("%d",&n);
if(n>=20)
{
printf("Error!
Thevalueofnmustin(0,20).");getch();return1;
}
if(n<=0)
{
printf("Error!
Thevalueofnmustin(0,20).");getch();return1;
}
for(i=0;i<=n-1;i++)
{
printf("x[%d]:
",i);
scanf("%f",&x[i]);
}
printf("\n");
for(i=0;i<=n-1;i++)
{
printf("y[%d]:
",i);scanf("%f",&y[i]);
}
printf("\n");
printf("Inputxx:
");
scanf("%f",&xx);
yy=lagrange(x,y,xx,n);
printf("x=%f,y=%f\n",xx,yy);
getch();
}
举例如下:
已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。
运行结果如下: