拉格朗日插值法(2学时)
一、 目的与要求:
? 熟悉拉格朗日插值多项式和牛顿插值多项式,注意其不同特点;
二、 实验内容:
? 通过拉格朗日插值和牛顿插值多项式的两个实例的计算,了解两种求解方法,分析他们的优缺点。
三、 程序与实例
算法 1. 2. l
输入xi,yi(i=0,1,2,?,n),令L(xn)=0; 对=0,1,2,?,n计算
li(x)=
?xi?0j?inx?xji?xj
Ln? Ln+li(x)yi 程序与实例 例1 已知函数表
xi yi
0.56160 0.82741 0.56280 0.82659 0.56401 0.82577 0.56521 0.82495 用三次拉格朗日多项式求x=0.5635的函数近似值。 #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; }
void main() {
float x[4]={0.56160,0.56280,0.56401,0.56521}; float y[4]={0.82741,0.82659,0.82577,0.82495}; float xx=0.5635,yy;
float Lagrange(float *,float *,float,int); yy=Lagrange(x,y,xx,4); clrscr();
printf(\ getch(); } ??
? 牛顿插值多项式 算法
1. 输入n,xi,yi (i=0,1,2?,n);
2. 对k=1,2,3?,n, i=1,2, ?,k计算各阶差商f(x0,x1 ?,xk); 3. 计算函数值
Nn(x)=f(x0)+f[x0, x1](x- x0)+?+f[x0, x1,?,xn](x- x0)(x- x1)?(x-xn?1) 程序与实例
例2 已知函数表
xi yi 0.4 0.41075 0.55 0.57815 0.65 0.88811 0.8 0.9 1.02652 1.02652
用牛顿插值多项式求Nn(0.596)和Nn(0.895)。 #include
void Difference(float *x,float *y,int n) { float *f; int k,i;
f=(float*)malloc(n*sizeof(float)); for (k=1;k<=n;k++) {
f[0]=y[k]; for (i=0;i f[i+1]=(f[i]-y[i])/(x[k]-x[i]); y[k]=f[k]; } return; } main() { int i; float varx=0.596,b; float x[N+1]={0.4,0.55,0.65,0.8,0.9}; float y[N+1]={0.41075,0.57815,0.69675,0.88811,1.02652}; Difference(x,(float*)y,N); clrscr(); b=y[N]; for (i=N-1;i>=0;i--) b=b*(varx-x[i])+y[i]; printf(\ getch(); } 上机实验作以下两题: 1. xi yi 作二次插值,并求x1=-2,x2=0,x3=2.75时的函数近似值 2. xi 0.30 0.42 0.50 0.58 0.66 0.72 按下列数据 -3.0 1.0 -1.0 1.5 1.0 2.0 2.0 2.0 3.0 1.0 按下列数据 yi 1.04403 1.08462 1.11803 1.15603 1.19817 1.23223 作五次插值,并求x1=0.46,x2=0.55,x3=0.60时的函数近似值