当前位置:文档之家› 插值法实验报告

插值法实验报告

实验二插值法
1、实验目的:
1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。

2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。

2、实验要求:
1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;
2)编写上机实验程序,作好上机前的准备工作;
3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);
4)分析和解释计算结果;
5)按照要求书写实验报告;
3、实验内容:
1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。

已知函数表:(0.56160,0.82741)、(0.56280,0.82659)、(0.56401,0.82577)、(0.56521,0.82495)用三次拉格朗日插值多项式求x=0.5635时函数近似值。

2) 求满足插值条件的插值多项式及余项
1)
4、题目:插值法
5、原理:
拉格郎日插值原理:
n次拉格朗日插值多项式为:L
n (x)=y
l
(x)+y
1
l
1
(x)+y
2
l
2
(x)+…+y
n
l
n
(x)
n=1时,称为线性插值,
L 1(x)=y
(x-x
1
)/(x
-x
1
)+y
1
(x-x
)/(x
1
-x
)=y
+(y
1
-x
)(x-x
)/(x
1
-x
)
n=2时,称为二次插值或抛物线插值,
L 2(x)=y
(x-x
1
)(x-x
2
)/(x
-x
1
)/(x
-x
2
)+y
1
(x-x
)(x-x
2
)/(x
1
-x
)/(x
1
-x
2
)+y
2
(x
-x
0)(x-x
1
)/(x
2
-x
)/(x
2
-x
1
)
n=i时,
Li= (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)
(X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)
6、设计思想:
拉格朗日插值法是根据n + 1个点x0, x1, ... x n(x0 < x1 < ... x n)的函数值f (x0), f (x1) , ... , f (x n)推出n次多項式p(x),然后n次多項式p (x)求出任意的点x对应的函数值f (x)的算法。

7、对应程序:
1 ) 三次拉格朗日插值多项式求x=0.5635时函数近似值
#include"stdio.h"
#define n 5
void main()
{
int i,j;
float x[n],y[n];
float x1;
float a=1;
float b=1;
float lx=0;
printf("\n请输入想要求解的X:\n x=");
scanf("%f",&x1);
printf("请输入所有点的横纵坐标:\n");
for(i=1;i<n;i++)
{
printf("x[%d]=",i);
scanf("%f",&x[i]);
printf("y[%d]=",i);
scanf("%f",&y[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j!=i)
{
b=b*(x1-x[j]);
a=a*(x[i]-x[j]);
}
}
lx=lx+b*y[i]/a;
a=b=1;
}
printf("\n求得的解是l(%f)=%f",x1,lx);
}
2 ) 满足插值条件的插值多项式及余项
#include <stdio.h>
#define m 0
#define n 1
float L0(float a,float x1,float x0)
{
return (a-x1)/(x0-x1);
}
float L1(float a,float x1,float x0)
{
return (a-x0)/(x1-x0);
}
float H(float x0,float x1,float y0,float y1,float m0,float m1,float a) {
float b;
b=y0*(1-2*(a-x0)/(x0-x1))*L0(a,x1,x0)*L0(a,x1,x0)+y1*(1-2*(a-x1)/ (x1-x0))*L1(a,x1,x0)*L1(a,x1,x0)+m0*(a-x0)*L0(a,x1,x0)*L0(a,x1,x0)+m1 *(a-x1)*L1(a,x1,x0)*L1(a,x1,x0);
return b;
}
void main()
{
float x0=1,x1=2,y0=2,y1=3,m0=0,n1=-1,a1=1.5,a2=1.7;
float k1,k2;
printf("input a1: \n");
printf(" %f\n",a1);
k1=H(x0,x1,y0,y1,m0,n1,a1);
printf("%f的函数值为:%f\n\n\n",a1,k1);
printf("input a2: \n");
printf(" %f\n",a2);
k2=H(x0,x1,y0,y1,m0,n1,a2);
printf("%f的函数值为:%f\n\n",a2,k2);
}
8、实验结果:
x=0.5635时函数近似值为0.826116
9、图形(如果可视化)
三次拉格朗日插值多项式求x=0.5635时函数近似值
满足插值条件的插值多项式及余项
10、实验体会:
经过本次实验,让我清楚了整个运算过程我对C语言的编程更加熟练,对拉格朗日插值和Hermite函数插值法的运用更加熟练,也牢牢的记住了这两个公式的使用。

相关主题