- 35
- 0
- 约 8页
- 2016-12-28 发布于湖北
- 举报
代数插值法的论述
代数插值法
插值法概述
插值法是函数逼近的重要方法之一,有着广泛的应用 。在生产和实验中,函数f(x)或者其表达式不便于计算复杂或者无表达式而只有函数在给定点的函数值(或其导数值) ,此时我们希望建立一个简单的而便于计算的函数((x),使其近似的代替f(x),有很多种插值法,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermit插值,分段插值和样条插值.这里主要介绍拉格朗日(Lagrange)插值和牛顿(Newton)插值。
1.1拉格朗日插值
1.1.1基本原理
构造n次多项式Pn (x)= yk lk (x)=y0l0 (x)+y1l1 (x)+…+ynln (x),这是不超过n次的多项式,其中基函数lk(x)=
显然lk (x)满足lk (xi)=
此时 Pn(x)≈f(x),误差Rn(x)=f(x)-Pn(x)=
其中∈(a,b)且依赖于x,=(x-x0)(x-x1)…(x-xn)n=1、插值节点只有两个xk,xk+1时
P1(x)=yklk(x)+yk+1lk+1(x)
其中基函数lk(x)= lk+1(x)=
1.1.2优缺点
可对插值函数选择多种不同的函数类型,由于代数多项式具有简单和一些良好的特性,故常选用代数多项式作为插值函数。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数(x)(k=0,1,…,n)均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。
#includestdio.h
#define TRUE 1
#define FALSE 0
#define N 10
#define M 2
void main(void)
{
double x[N],y[N],a,l[N];
int i,j,n,flag;
double answer=0.00f;
do{
printf(创建Lagrange插值多项式共用到N组(X,Y)值,请输入N:);
scanf(%d,n);
if(n=Nn=M) flag=FALSE;
else if(nN||n=1)
{
printf(对不起,你输入错误!\n请确保你输入的N满足2=N=%d.,N);
printf(\n);
flag=TRUE;
}
}while(flag==TRUE);
printf(\n请输入需要计算的X值:);
scanf(%lf,a);
for(i=0;in;i++)
{
printf(请输入第%d组(X,Y)的值:,i+1);
scanf(%lf%lf,x+i,y+i);
}
for(i=0;in;i++)
{
l[i]=1.0f;
for(j=0;jN;j++)
if(i!=j) l[i]*=(a-x[j])/(x[i]-x[j]);
else continue;
answer+=l[i]*y[i];
}
printf(f(%.3lf)=%lf\n,a,answer);
}
实验结果
Input n:4
Input x[n]:
O,4 0.55 0.65 0.8 0.9
Input y[n]
0.41075 0.57815 0.69675 0.88811 1.02652
Please input x:0.596
Nn(0.596)=0.631914
1.2牛顿插值
1.2.1基本原理
构造n次多项式Nn(x)=f(x0)+f(x0,x1)(x-x0)+f(x0,x1,x2)(x-x0)(x-x1)+…
+f(x0,x1,x2,…,xn)(x-x0)(x-x1)…(x-xn)
称为牛顿插值多项式,其中
(二个节点,一阶差商)
(三个节点,二阶差商)
(n+1个节点,n阶差商)
注意:由于插值多项式的唯一性,有时为了避免拉格朗日余项Rn(x)中n+1阶导数的运算,用牛顿插值公式Rn (x)=f(x)-Nn(x)=f(x,x0,…,xn)ωn+1(x),
其中ωn+1(x)=(x-x0)(x-x1)…(x-xn)
1.2.2优缺点
牛顿插值法具有承袭性和易变性的特点,当增加一个节点时,只要再增加一项就可以了即而拉格朗日插值若要增加一个节点时全部基函数都需要重新算过。牛顿插值法既适合于用来计算函数值,也适合于做理论推导,比如说可用来推导微分方程的数值求解公式。
1.2.3数值实验
一、差商相关公式
二、题目
已知函数表如下:
0.0 0.5 1.0 1.5 2.0 2.5
原创力文档

文档评论(0)