数值分析拉格朗日插值法上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课题一:拉格朗日插值法
1.实验目的
1.学习和掌握拉格朗日插值多项式。
2.运用拉格朗日插值多项式进行计算。
2.实验过程
作出插值点(,),(,),(,)
二、算法步骤
已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值。
3.程序流程:
(1)输入已知点的个数;
(2)分别输入已知点的X坐标;
(3)分别输入已知点的Y坐标;
程序如下:
#include
#include <>
#include <>
float lagrange(float *x,float *y,float xx,int n) /*拉格朗日
插值算法*/
{
int i,j;
float *a,yy=; /*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);
return yy;
}
int main()
{
int i;
int n;
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",&n);
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=1,-1,2时f(x)=0,-3,4,求f的值。运
行结果如下:
Input n:3
x[0]:1
x[1]:-1
x[2]:2
y[0]:0
y[1]:-3
y[2]:4
Input xx:
x=,y=
3、实验总结
拉格朗日插值模型简单,结构紧凑,是经典的插值法。但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算。且当增大插值阶数时容易出现龙格现象。
在物理化学,资产价值鉴定工作和计算某一时刻的卫星坐标和钟差等这些方面可以应用Lagrange插值。采用拉格朗日插值法计算设备等功能重置成本,计算精度较高,方法快捷。但是这方法只能针对可比性较强的标准设备,方法本身也只考虑了单一功能参数,它的应用范围因此受到了一定的限制。作为一种探索,我们可以将此算法以及其它算法集成与计算机评估分析系统中,作为传统评估分析方法的辅助参考工具,以提高资产价值鉴定工作的科学性和准确性。