第九章插值与拟合

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

-97-第九章插值与拟合插值:求过已知有限个数据点的近似函数。拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时容易确定,有时则并不明显。§1插值方法下面介绍几种基本的、常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite插值和三次样条插值。1.1拉格朗日多项式插值1.1.1插值多项式用多项式作为研究插值的工具,称为代数插值。其基本问题是:已知函数)(xf在区间],[ba上1n个不同点nxxx,,,10处的函数值)(iixfy),,1,0(ni,求一个至多n次多项式nnnxaxaax10)((1)使其在给定点处与)(xf同值,即满足插值条件),,1,0()()(niyxfxiiin(2))(xn称为插值多项式,),,1,0(nixi称为插值节点,简称节点,],[ba称为插值区间。从几何上看,n次多项式插值就是过1n个点))(,(iixfx),,1,0(ni,作一条多项式曲线)(xyn近似曲线)(xfy。n次多项式(1)有1n个待定系数,由插值条件(2)恰好给出1n个方程nnnnnnnnnnyxaxaxaayxaxaxaayxaxaxaa22101121211000202010(3)记此方程组的系数矩阵为A,则nnnnnnxxxxxxxxxA212110200111)det(是范德蒙特(Vandermonde)行列式。当nxxx,,,10互不相同时,此行列式值不为零。因此方程组(3)有唯一解。这表明,只要1n个节点互不相同,满足插值要求(2)的插值多项式(1)是唯一的。插值多项式与被插函数之间的差)()()(xxfxRnn-98-称为截断误差,又称为插值余项。当)(xf充分光滑时,),(),()!1()()()()(1)1(baxnfxLxfxRnnnn其中njjnxxx01)()(。1.1.2拉格朗日插值多项式实际上比较方便的作法不是解方程(3)求待定系数,而是先构造一组基函数)())(()()())(()()(110110niiiiiiniiixxxxxxxxxxxxxxxxxln),0,1,(i,0nijjjijxxxx)(xli是n次多项式,满足ijijxlji10)(令nininijjjijiiinxxxxyxlyxL000)()((4)上式称为n次Lagrange插值多项式,由方程(3)解的唯一性,1n个节点的n次Lagrange插值多项式存在唯一。1.1.3用Matlab作Lagrange插值Matlab中没有现成的Lagrange插值函数,必须编写一个M文件实现Lagrange插值。设n个节点数据以数组0,0yx输入(注意Matlat的数组下标从1开始),m个插值点以数组x输入,输出数组y为m个插值。编写一个名为lagrange.m的M文件:functiony=lagrange(x0,y0,x);n=length(x0);m=length(x);fori=1:mz=x(i);s=0.0;fork=1:np=1.0;forj=1:nifj~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end-99-1.2牛顿(Newton)插值在导出Newton公式前,先介绍公式表示中所需要用到的差商、差分的概念及性质。1.2.1差商定义设有函数,,,),(210xxxxf为一系列互不相等的点,称jijixxxfxf)()()(ji为)(xf关于点jixx,一阶差商(也称均差)记为],[jixxf,即jijijixxxfxfxxf)()(],[称一阶差商的差商kikjjixxxxfxxf],[],[为)(xf关于点kjixxx,,的二阶差商,记为],,[kjixxxf。一般地,称kkkxxxxxfxxxf021110],,,[],,,[为)(xf关于点kxxx,,,10的k阶差商,记为kkkkxxxxxfxxxfxxxf02111010],,,[],,,[],,,[容易证明,差商具有下述性质:],[],[ijjixxfxxf],,[],,[],,[kijjkikjixxxfxxxfxxxf1.2.2Newton插值公式线性插值公式可表成],[)()()(10001xxfxxxfx称为一次Newton插值多项式。一般地,由各阶差商的定义,依次可得],[)()()(000xxfxxxfxf],,[)(],[],[101100xxxfxxxxfxxf],,,[)(],,[],,[210221010xxxxfxxxxxfxxxf],,,[)(],,,[],,,[01010nnnnxxxfxxxxxfxxxf将以上各式分别乘以,),)((),(,1100xxxxxx)())((110nxxxxxx,然后相加并消去两边相等的部分,即得],,,,[)())((],,,[)())((],[)()()(1010101101000nnnnxxxxfxxxxxxxxxfxxxxxxxxfxxxfxf记-100-],,,,[)(],,,,[)())(()(],,,[)())((],[)()()(1011010101101000nnnnnnnnxxxxfxxxxxfxxxxxxxRxxxfxxxxxxxxfxxxfxN显然,)(xNn是至多n次的多项式,且满足插值条件,因而它是)(xf的n次插值多项式。这种形式的插值多项式称为Newton插值多项式。)(xRn称为Newton插值余项。Newton插值的优点是:每增加一个节点,插值多项式只增加一项,即],,,[)()()()(11001nnnnxxxfxxxxxNxN因而便于递推运算。而且Newton插值的计算量小于Lagrange插值。由插值多项式的唯一性可知,Newton插值余项与Lagrange余项也是相等的,即),()()!1()(],,,,[)()(1)1(101baxnfxxxxfxxRnnnnn由此可得差商与导数的关系!)(],,,[)(10nfxxxfnn其中}{max},{min),,(00iniinixx。1.2.3差分当节点等距时,即相邻两个节点之差(称为步长)为常数,Newton插值公式的形式会更简单。此时关于节点间函数的平均变化率(差商)可用函数值之差(差分)来表示。定义设有等距节点),,1,0(0nkkhxxk,步长h为常数,)(kkxff。称相邻两个节点1,kkxx处的函数值的增量)1,,1,0(1nkffkk为函数)(xf在点kx处以h为步长的一阶差分,记为kf,即),,1,0(1nkfffkkk类似地,定义差分的差分为高阶差分。如二阶差分为)2,,1,0(12nkfffkkk一般地,m阶差分为),3,2(111kfffkmkmkm,上面定义的各阶差分又称为向前差分。常用的差分还有两种:1kkkfff称为)(xf在kx处以h为步长的向后差分;22hxfhxffkkk称为)(xf在kx处以h为步长的中心差分。一般地,m阶向后差分与m阶中心差分公式为-101-111kmkmkmfff211211kmkmkmfff差分具有以下性质:(i)各阶差分均可表成函数值的线性组合,例如jmkmjjkmfjmf)1(0jkmjjkmfjmf)1(0(ii)各种差分之间可以互化。向后差分与中心差分化成向前差分的公式如下:mkmkmff2mmmkmff1.2.4等距节点插值公式如果插值节点是等距的,则插值公式可用差分表示。设已知节点khxxk0),,2,1,0(nk,则有)())((!)()())(](,,,[)](,[)()(1100000110100100nnnnnnxxxxxxhnfxxhffxxxxxxxxxfxxxxfxfxN若令thxx0,则上式又可变形为0000!)1()1()(fnntttftfthxNnn上式称为Newton向前插值公式。1.3分段线性插值1.3.1插值多项式的振荡用Lagrange插值多项式)(xLn近似))((bxaxf,虽然随着节点个数的增加,)(xLn的次数n变大,多数情况下误差|)(|xRn会变小。但是n增大时,)(xLn的光滑性变坏,有时会出现很大的振荡。理论上,当n,在],[ba内并不能保证)(xLn处处收敛于)(xf。Runge给出了一个有名的例子:]5,5[,11)(2xxxf对于较大的||x,随着n的增大,)(xLn振荡越来越大,事实上可以证明,仅当63.3||x时,才有)()(limxfxLnn,而在此区间外,)(xLn是发散的。高次插值多项式的这些缺陷,促使人们转而寻求简单的低次多项式插值。1.3.2分段线性插值简单地说,将每两个相邻的节点用直线连起来,如此形成的一条折线就是分段线性插值函数,记作)(xIn,它满足iinyxI)(,且)(xIn在每个小区间],[1iixx上是线性-102-函数),,1,0(ni。)(xIn可以表示为niiinxlyxI0)()(其它时舍去时舍去,)(,)0],[0(],[,)(111111nixxxxxxxixxxxxxxxliiiiiiiiiii)(xIn有良好的收敛性,即对于],[bax有,)()(limxfxInn。用)(xIn计算x点的插值时,只用到x左右的两个节点,计算量与节点个数n无关。但n越大,分段越多,插值误差越小。实际上用函数表作插值计算时,分段线性插值就足够了,如数学、物理中用的特殊函数表,数理统计中用的概率分布表等。1.3.3用Matlab实现分段线性插值用Matlab实现分段线性插值不需要编制函数程序,Matlab中有现成的一维插值函数interp1。y=interp1(x0,y0,x,'method')method指定插值的方法,默认为线性插值。其值可为:'nearest'最近项插值'linear'线性插值'spline'立方样条插值'cubic'立方插值。所有的插值方法要求x0是单调的。当x0为等距时可以用快速插值法,使用快速插值法的格式为'*nearest'、'*linear'、'*spline'、'*cubic'。1.4埃尔米特(Hermite)插值1.4.1Hermite插值多项式如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值,这就是Hermite插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的Hermite插值。设已知函数)(xfy在1n个互异节点nxxx,,,10上的函数值)(iixfy),,1,0(ni和导数值)(''iixfy),,1,0(ni,要求一个至多12n次的多项式)(xH,使得iiyxH)(iiyxH')('),,1,0(ni满足上述

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功