拉格朗日插值法C语言的实现(实验报告)
实验名称:实验一:拉格朗日插值法C语言的实现日期:2011-9-19任课教师:赖国明专业:数学与应用数学学号:2009111437姓名:郑永锋【实验目的】
1、进一步熟悉拉格朗日插值法。
2、掌握编程语言字符处理程序的设计和调试技术。【实验内容】
(题目)作出插值点(-2.00,0.00),(2.00,5.00),(5.00,6.00)的二次Lagrange 插值多项式L2 (x),并计算L2 (-1.2), L2 (1.2)。
解题思路:
(1)输入已知点的个数;
(2)分别输入已知点的X坐标;
(3)分别输入已知点的Y坐标;
(4)通过调用函数lagrange函数,来求某点所对应的函数值。
拉格朗日插值多项式如下:
其中
程序流程图:
↓
↓
↓
↓
源程序:
#include
#include
float lagrange(float *x,float *y,float xx,int n)
{
int i,j;
float *a,yy=0.0;
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);
return yy;
}
int main()
{
int i;
int n;
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=20)
{
printf("Error!The value of n must in (0,20)."); getch();return 1;
}
if(n<=0)
{
printf("Error! The value of n must in (0,20)."); getch(); return 1;
}
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("Input xx:");
scanf("%f",&xx);
yy=lagrange(x,y,xx,n);
printf("x=%f,y=%f\n",xx,yy);
getch();
}
运行结果:
已知当x=-2.00,2.00,5.00时f(x)=0.00,3.00,6.00,求f(1.2), f(-1.2)的值。
运行结果如下:
学习心得:
通过完成拉格朗日插值法C语言的实现这个实验,我重新复习到了C语言的语法,也深刻地体会到运用计算机对完成复杂的数值计算的方便。
【教师评语和成绩】
成绩: 指导教师: 日期:
算法2实验 一 .拉格朗日插值法C语言的实现
1.实验目的:
进一步熟悉拉格朗日插值法。
掌握编程语言字符处理程序的设计和调试技术。
2.实验要求:
已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标 。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值 。
3.程序流程:
(1)输入已知点的个数;
(2)分别输入已知点的X坐标;
(3)分别输入已知点的Y坐标;
(4)通过调用函数lagrange函数,来求