拉格朗日插值法.doc
韩山师范学院 C语言程序设计 实验名称: 实验一:拉格朗日插值法 日期: 2011-09-20
任课教师: 赖国明 专业: 数学与应用数学 学号: 2009111446 姓名: 林哲楠
【实验目的】
1.进一步熟悉拉格朗日插值法。
2.掌握编程语言字符处理程序的设计和调试技术。 【实验内容】
(题目)做出插值点(-2.00,0.00),(2.00,3.00),(5.00,6.00)的二次lagrange插值多项式L(X),2
并计算L(-1.2),L(1.2)。 22
, 解题思路:
(1)输入已知点的个数;
(2)分别输入已知点的X坐标;
(3)分别输入已知点的Y坐标;
(4)通过调用函数lagrange函数,来求某点所对应的函数值。
拉格朗日插值多项式如下:
n
L()()0,1,xylxyjn,,,……,njkkjj,0k
()xx,……(x-x)(x-x) …(x-x)0k-1k+1nlxkn()0,1,,,,……k其中 ……(x-x)(x-x) ()xx,…(x-x)0kk-1kk+1knk
程序流程图:
开始
?
输入已知点个数n
?
输入已知点个数n
?
调用函数lagrange函数
?
输出结果
第 1 页 共 3 页
韩山师范学院 C语言程序设计
, 源程序:1
#include
#include
float lagrange(float *x,float *y,float xx,int n) {
int i,j;
float *a,yy=0.0;
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);
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);
第 2 页 共 3 页
韩山师范学院 C语言程序设计
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)的值。 运行结果如下:
教师评语和成绩】
成绩: 指导教师: 日期:
第 3 页 共 3 页
本文档为【拉格朗日插值法.doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。