第5章 插值法Word文件下载.docx

上传人:b****1 文档编号:901883 上传时间:2023-04-29 格式:DOCX 页数:40 大小:643.91KB
下载 相关 举报
第5章 插值法Word文件下载.docx_第1页
第1页 / 共40页
第5章 插值法Word文件下载.docx_第2页
第2页 / 共40页
第5章 插值法Word文件下载.docx_第3页
第3页 / 共40页
第5章 插值法Word文件下载.docx_第4页
第4页 / 共40页
第5章 插值法Word文件下载.docx_第5页
第5页 / 共40页
第5章 插值法Word文件下载.docx_第6页
第6页 / 共40页
第5章 插值法Word文件下载.docx_第7页
第7页 / 共40页
第5章 插值法Word文件下载.docx_第8页
第8页 / 共40页
第5章 插值法Word文件下载.docx_第9页
第9页 / 共40页
第5章 插值法Word文件下载.docx_第10页
第10页 / 共40页
第5章 插值法Word文件下载.docx_第11页
第11页 / 共40页
第5章 插值法Word文件下载.docx_第12页
第12页 / 共40页
第5章 插值法Word文件下载.docx_第13页
第13页 / 共40页
第5章 插值法Word文件下载.docx_第14页
第14页 / 共40页
第5章 插值法Word文件下载.docx_第15页
第15页 / 共40页
第5章 插值法Word文件下载.docx_第16页
第16页 / 共40页
第5章 插值法Word文件下载.docx_第17页
第17页 / 共40页
第5章 插值法Word文件下载.docx_第18页
第18页 / 共40页
第5章 插值法Word文件下载.docx_第19页
第19页 / 共40页
第5章 插值法Word文件下载.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第5章 插值法Word文件下载.docx

《第5章 插值法Word文件下载.docx》由会员分享,可在线阅读,更多相关《第5章 插值法Word文件下载.docx(40页珍藏版)》请在冰点文库上搜索。

第5章 插值法Word文件下载.docx

<

xn=b

且在节点上的函数值f(xi)=yi,i=0,1,2,,n,如果函数(x)满足:

1)(x)在[a,b]上连续

2)(xi)=yi,i=0,1,2,,n

3)(x)在每个子区间[xi,xi+1](i=0,1,2,,n-1)上是次数为1的多项式

则称(x)是定义在[a,b]上的分段线性插值函数。

6.m次样条插值函数

设f(x)是区间[a,b]上的一个连续可微函数,在区间[a,b]上给定一组节点:

且y=f(x)在点x0,x1,x2,xn的值为y0,y1,y2,yn,如果函数s(x)满足条件

(1)s(x)在每个子区间[xi,xi+1](i=0,1,2,,n-1)上是次数不超过m的多项式;

(2)s(x)在区间[a,b]上有m-1阶连续导数;

(3)s(xi)=f(xi)=yi,i=0,1,2,,n

则称s(x)为函数f(x)的在[a,b]上的m次样条插值函数。

x0,x1,x2,称为样条结点,其中x1,,xn-1称为内结点,x0,xn称为边界结点。

当m=3时,则称s(x)为函数f(x)的三次样条插值函数。

5.3程序中Mathematica语句解释

1.Product[f(i),{i,imin,imax,h}]

计算乘积f(imin)f(imin+h)f(imin+2h)……f(imin+nh)}

imax–himin+nhimax,h>

2.Simplify[expr]对expr进行化简

3.Append[list,elem]在表list的后面加一个元素elem

4.Prepend[list,elem]在表list的前面加一个元素elem

5.4方法、程序、实验

插值法是函数逼近的重要方法之一,它是求近似函数的一种方法,有着广泛的应用。

插值法有很多种,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermite插值,分段插值和样条插值等。

这里只给出Lagrange插值、Newton插值、分段线性插值和样条插值的构造过程及程序。

1.Lagrange插值

Lagrange插值是将待求的n次多项式插值函数Pn(x)改写成另一种表示方式,再利用插值条件确定其中的待定插值基函数,从而求出插值多项式。

Lagrange插值是多项式插值,它成功地用构造插值基函数的方法解决了求多项式插值函数出现的病态问题。

1)Lagrange插值的构造过程

令插值多项式为

Ln(x)=l0n(x)y0+l1n(x)y1+l2n(x)y2+…+lnn(x)yn

式中l0n(x),l1n(x),l2n(x),…,lnn(x)都是次数n的待定多项式,利用插值条件

Pn(x0)=y0,Pn(x1)=y1,......,Pn(xn)=yn

可以得到

l0n(x0)=1,l1n(x0)=0,l2n(x0)=0,…,lnn(x0)=0

l0n(x1)=0,l1n(x1)=1,l2n(x1)=0,…,lnn(x1)=0

……...

l0n(xn)=0,l1n(xn)=0,l2n(xn)=0,…,lnn(xn)=1

考虑函数l0n(x),由其在x1,x2...xn的零值,可以知道它含有

x-x1,x-x2,...,x-xn

n个因子,于是可令

l0n(x)=a(x-x1)(x-x2)...(x-xn)

利用l0n(x0)=1确定其中的系数a,得

类似的可以得出l1n(x),l2n(x),…,lnn(x)

l0n(x),l1n(x),…,lnn(x)称为以x0,x1,...,xn为节点的插值基函数。

于是,将这些插值基函数代入前面的多项式Ln(x)即得到如下所求的n次Lagrange插值多项式:

 

2)求n次Lagrange插值多项式算法

1.输入n+1个插值点:

(xi,yi),i=0,1,…,n

2.计算插值基函数l0n(x),l1n(x),…,lnn(x)

3.给出n次Lagrange插值多项式:

Ln(x)=y0l0n(x)+y1l1n(x)+…+ynlnn(x)

3)求Lagrange插值多项式程序

Clear[lag,xi,x,yi];

xi=Input["

xi="

]

yi=Input["

yi="

n=Length[xi]-1;

p=Sum[yi[[i]]*

(Product[(x-xi[[j]])/(xi[[i]]-xi[[j]]),{j,1,i-1}]*

Product[(x-xi[[j]])/(xi[[i]]-xi[[j]]),

{j,i+1,n+1}]),{i,1,n+1}];

lag[x_]=Simplify[p]

说明本程序用于求n次Lagrange插值多项式。

程序执行后,按要求通过键盘输入插值基点xi:

{x0,x1,...,xn}和对应函数值yi:

{y0,y1,…,yn}后,程序即可给出对应的n次Lagrange插值多项式lag[x]。

程序中变量说明

xi:

存放插值基点{x0,x1,...,xn}

yi:

存放对应函数值{y0,y1,…,yn}

lag[x]:

存放求出的n次Lagrange插值多项式Ln(x)

注:

语句lag[x_]=Simplify[p]用简化形式给出对应的n次Lagrange插值多项式。

4)例题与实验

例1.给定数据表

x0123

y=f(x)13512

用Lagrange插值法求三次插值多项式,并给出函数f(x)在x=1.4的近似值。

解:

执行Lagrange插值程序后,在输入的两个窗口中按提示分别输入

{0,1,2,3}、{1,3,5,12}

每次输入后用鼠标点击窗口的“OK”按扭,得如下插值函数:

所以得到三次插值多项式L3(x)=

接着键入:

lag[1.4]

得输出:

3.52,因此f(x)在x=1.4的近似值为3.52,即f(1.4)3.52.

2.Newton插值

Newton插值是多项式插值的另一种表示形式,它在增加插值节点时具有灵活性,只要在原有的插值多项式中增加一项就得到新的插值函数。

1)Newton插值构造过程

为了使插值Newton多项式具有承袭性,令插值函数具有下列形式:

式中

称为Newton插值基函数。

为求出Nn(x),利用插值条件和差商,得出如下n次Newton插值多项式:

计算Newton插值多项式Nn(x)常用如下差商表:

2)求Newton插值多项式算法

1.输入n+1个插值点:

2.计算差商表

3.给出n次Newton插值多项式。

3)求Newton插值多项式程序

Clear[newt,s,x];

n=Length[xi];

(*下面计算差商表*)

f=Table[0,{n},{n}];

Do[f[[i,1]]=yi[[i]],{i,1,n}]

Do[f[[i,j+1]]=(f[[i,j]]-f[[i+1,j]])/(xi[[i]]-xi[[i+j]]),

{j,1,n-1},{i,1,n-j}]

Print["

差商表"

Do[Print[xi[[i]],"

"

f[[i]]],{i,1,n}]

(*下面求Newton插值多项式*)

fa=1;

s=f[[1,1]];

Do[fa=(x-xi[[k]])*fa;

s=s+fa*f[[1,k+1]],

{k,1,n-1}]

newt[x_]=s

Simplify[%]

说明本程序用于求n次Newton插值多项式。

{y0,y1,…,yn}后,程序依次给出输入的数据表、计算出的差商表、Newton插值多项式、Newton插值多项式的简化形式。

f:

存放函数值{y0,y1,…,yn}及所有差商

newt[x]:

存放求出的n次newton插值多项式Nn(x)

1)语句f=Table[0,{n},{n}]用于产生一个nn的矩阵变元用于存放函数值{y0,y1,…,yn}及所有差商。

2)在Mathematica中有一个求n次插值多项式的命令,命令形式为:

InterpolatingPolynomial[{{x01,y0},{x1,y1},{x2,y2},…,{xn,yn}},x]

它可以求过n+1个插值点{{x01,y0},{x1,y1},{x2,y2},…,{xn,yn}}的n次插值多项式Pn(x)。

4)例题与实验

例2.给定数据表

x4.00024.01044.02334.0294

y0.60208170.60318770.60458240.6052404

1)计算差商表

2)用Newton插值法求三次插值多项式Nn(x)

3)求f(4.011)的近似值

执行Newton插值程序后,在输入的两个窗口中按提示分别输入

{4.0002,4.0104,4.0233,4.0294}、{0.6020817,0.6031877,0.6045824,0.6052404},

每次输入后用鼠标点击窗口的“OK”按扭,得如下输出:

{4.0002,4.0104,4.0233,4.0294}

{0.6020817,0.6031877,0.6045824,0.6052404}

差商表

4.0002{0.6020817,0.108431,-0.0136404,0.0211629}

4.0104{0.6031877,0.108116,-0.0130225,0}

4.0233{0.6045824,0.107869,0,0}

4.0294{0.6052404,0,0,0}

0.6020817+0.108431(-4.0002+x)-0.0136404(-4.0104+x)(-4.0002+x)+

0.0211629(-4.0233+x)(-4.0104+x)(-4.0002+x)

-1.41642+1.23926x-0.268313x2+0.0211629x3

于是我们得到本题的差商表:

xiyif[,]f[,,]f[,,,]

4.00020.6020817,0.108431,-0.0136404,0.0211629

4.01040.6031877,0.108116,-0.0130225

4.02330.6045824,0.107869

4.02940.6052404

和三次插值多项式N3(x)=-1.41642+1.23926x-0.268313x2+0.0211629x3

newt[4.011]

得输出0.603253,因此f(4.011)0.603253

例3.多项式插值的误差估计式中可以看到,当插值节点越多时误差会越小,这个结论正确吗?

通过实验说明该结论的正确性。

解:

考虑函数f(x)=(1+x2)-1在区间[-4,4]内选取不同个数的等距插值节点做观察,这里分别选[-4,4]内的9个和11个的等距节点来做实验,将对应的插值函数图与被插函数f(x)=(1+x2)-1画在一起做观察,为简单起见,这里用Mathematica命令做实验,对应命令为:

In[1]:

=u=Table[{x,(1+x^2)^-1},{x,-4,4}];

(*采取f(x)在[-4,4]内的9个插值点*)

In[2]:

=g=ListPlot[u,PlotStyle->

PointSize[0.04]]

(*将散点图图形文件存放在变量g中*)

In[3]:

=s=InterpolatingPolynomial[u,x];

(*将插值函数存放在变量s中*)

In[4]:

=t=Plot[{s,(1+x^2)^-1},{x,-4,4},

PlotStyle->

{{Thickness[0.005]},{Thickness[0.006]}}]

(*将插值函数s与f(x)画在一起的图形文件存放在变量t中*)

In[5]:

=Show[t,g]

(*将散点图,插值函数s,f(x)画在一个坐标系中,输出图形见图5-1*)

图5-1在[-4,4]中选9个等距节点的插值函数与被插函数图,粗线为被插函数图

In[6]:

=u=Table[{x,(1+x^2)^-1},{x,-4,4,0.8}];

(*采取f(x)在[-4,4]内的11插值点*)

In[7]:

=g=ListPlot[u,PlotStyle->

In[8]:

=s=InterpolatingPolynomial[u,x];

In[9]:

=t=Plot[{s,(1+x^2)^-1},{x,-4,4},

In[10]:

=Show[t,g]

输出图形见图5-2

图5-2在[-4,4]中选11个等距节点的插值函数与被插函数图

图5-2中细的曲线是插值函数,粗的曲线是原来函数(被插函数)。

从图形上观察,说明增加插值节点不能保证使插值误差变小,本题图象可以看到,节点的增多得到的插值函数产生的误差在靠近端点的函数值不但没有减少反而增大了。

因此当插值节点越多时误差会越小,这个结论不正确。

这个实验也说明高次插值函数效果不好。

插值点个数增加,出现误差增大的现象称为Runge现象。

Runge现象的发现使人们知道了高次插值函数误差较大,这也是为什么实用中一般不使用高次多项式插值的原因。

3.分段线性插值

分段线性插值是最简单的分段插值,它在每个子区间[xi,xi+1](i=0,1,2,,n-1)上用直线段连接数据点构成的折线函数作为插值函数的。

分段线性插值函数具有计算简单,且有每个插值子区间趋于零时,分段线性插值函数可以克服Runge现象,且具有随着插值节点的增多,它可以是插值误差不断减小、一致逼近被插函数的特点。

1)分段线性插值函数的构造过程

在每个子区间[xi,xi+1](i=0,1,2,,n-1)上,用对应的两点:

xxixi+1

yyiyi+1

做过此两点的直线:

L(x)=k(x-xi)+yi

这里k=(yi+1-yi)/(xi+1-xi),然后将所有直线连起来即可。

显然这样得到的折线满足插值条件。

分段线性插值函数是一个分段函数。

2)用分段线性插值函数做近似计算的算法

1.输入n个插值点:

(xi,yi),i=1,…,n

2.输入要近似计算的自变量点xa

3.寻找包含xa的小区间[xi,xi+1]

4.用[xi,xi+1]上的线性插值函数在xa处的值作为f(xa)的函数值

3)用分段线性插值函数做近似计算的程序

Clear[x,a,b];

li[a_,b_,x_]:

=(b[[2]]-a[[2]])/(b[[1]]-a[[1]])*(x-a[[1]])+a[[2]]

xa=Input["

xa="

If[xa<

xi[[1]]||xa>

xi[[n]],

超限"

];

Break[],

Do[If[xa>

=xi[[k]],m=k],{k,1,n-1}];

m="

m,"

x="

xi[[m]]];

li[{xi[[m]],yi[[m]]},{xi[[m+1]],yi[[m+1]]},xa]

说明本程序用分段线性插值做近似计算。

{x1,...,xn}和对应函数值yi:

{y1,…,yn}和要做近似计算的点xa后,程序将给出包含xa小区间[xi,xi+1]的下标i和xi,和函数f(xa)的近似值。

如果xa不在[x1,xn]内程序给出超限提示。

存放插值基点{x1,...,xn}

存放对应函数值{y1,…,yn}

xa:

存放要做近似计算的自变量值

m:

存放包含xa小区间[xi,xi+1]的下标i

在Mathematica中有一个求分段线性插值函数的命令,命令形式为:

Interpolation[{{x1,y1},{x2,y2},...,{xn,yn}},InterpolationOrder->

1]

用如上Mathematica命令求出的分段线性插值函数没有给出具体的分段函数表达式,而是用

“InterpolatingFunction[{x1,xn},<

>

]”作为所求的分段插值函数,通常可以用

变量=Interpolation[{数据点集合}]

把所得的分段插值函数存放在变量中,如果要计算插值函数在某一点的如p点的值,只要输入“变量[p]”即可,如果要表示这个插值函数应该用“变量[x]”。

此外,命令

3]

可以给出更好的分段插值函数。

例4.给定数据表

xi1234

yi0-5-63

1)用分段线性插值函数求函数f(x)在x=1.4的近似值

2)用Mathematica命令画出分段线性插值图形

执行求分段线性插值函数程序后,在输入的两个窗口中按提示分别输入

{1,2,3,4}、{0,-5,-6,3}、1.4

m=1x=1

-2

此结果说明f(x)在x=1.4的近似值为2,它对应的小区间为[x1,x2]。

为完成第二个问题,键入命令:

d=Interpolation[{{1,0},{2,-5},{3,-6},{4,3}},

InterpolationOrder->

Plot[d[x],{x,1,4}]

得输出如下:

InterpolatingFunction[{1,4},<

图5-3.例4的分段线性插值函数图形。

例5.在例3中,用分段插值函数代替n次多项式插值函数,观察插值节点增多时误差的变化情况。

对函数f(x)=(1+x2)-1在区间[-4,4]内选取不同个数的等距插值节点做观察,这里分别选[-4,4]内的9个和21个的等距节点来做实验,将对应的插值函数图与被插函数f(x)=(1+x2)-1画在一起做观察,为简单起见,这里用Mathematica命令做实验,对应命令为:

=u=Table[{x,(1+x^2)^-1},{x,-4,4}];

=s=Interpolation[u,InterpolationOrder->

1];

(*将线性插值函数存放在变量s中*)

=t=Plot[{s[x],(1+x^2)^-1},{x,-4,4},

(*将线性插值函数s(x)与f(x)画在一起的图形文件存放在变量t中*)

(*将散点图,线性插值函数s(x),f(x)画在一个坐标系中,输出图形见图5-4*)

图5-4在[-4,4]中选9个等距节点的线性插值函数与被插函数图,粗线为被插函数图

=u=Table[{x,(1+x^2)^-1},{x,-4,4,0.4}];

(*采取f(x)在[-4,4]内的21插值点*)

=s=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2