4321第三节分段线性插值法插值法分段线性插值法的一般理论分段线性插值多项式的构造分段线性插值余项和误差估计简单的分段高次插值多项式一般来说,高次插值多项式是不妥当的,从数值计算上可解释为高次插值多项式的计算会带来舍入误差的增大,从而引起计算失真。因此,实践上作插值时一般只用一次、二次最多用三次插值多项式。那么如何提高插值精度呢?采用分段插值是一种办法。分段线性插值法所谓分段线性插值就是通过插值点用折线连接起来逼近)(xfnnyyybxxxa1010,上的函数值为:设已知节点使其满足:构造插值函数)(x是线性函数在每个小区间上)(),,...,,,(],[)(),...,,,()()(xnixxniyxiiii210221011则称(x)是f(x)在[a,b]上的分段线性插值多项式。一、分段线性插值的概念)()(11111iiiiiiiiiixxxyxxxxyxxxxx分段表达式Lagrange插值多项式二、分段线性插值多项式的构造xjxj-1xj+1x0xn其它0,)(101010xxxxxxxxl计算量与n无关;n越大,误差越小.一般表达式njjjxlyx0)()(其它0,)(111nnnnnnxxxxxxxxl其它0,,)(111111iiiiiiiiiiixxxxxxxxxxxxxxxl分段线性插值多项式的构造余项定理:设f(x)在[a,b]上有二阶连续导数f″(x),则)(max),(max,8)()()(1102xfMxxhMhxxfxRbxaiini其中分段线性插值多项式的构造证明:由Lagrange余项公式,当x∈[xi,xi+1]时!2))()(()()()(1iixxxxfxRxxf)(max8)(4)(2)()(12121xfxxxxfxRiixxxiiii04)()2())((21211iiiiiixxxxxxxxx4)())((max2111iiiixxxxxxxxxii分段线性插值多项式的构造证毕。MhxfxxxRbaxiixxxiini8})(max8)({max)(],,[221101都有对任意分段线性插值多项式的构造例:设-1≤x≤1(1)将[-1,1]10等份,用分段线性插值近似计f(-0.96)。(2)将[-1,1]n等份,用分段线性插值近似计算,问如何选择步长h可使近似计算误差R10-4?22511)(xxf8.01)1(2941.0)8.0(1923.02.01)8.0(2.08.0)1()(xxxxfxfx解:(1)插值节点为xi=-1+i/5(i=0,1,…,10),h=1/5因为-0.96∈[-1,-0.8],取此区间为线性插值区间,其上的插值函数为例3.1分段线性插值多项式的构造所以f(-0.96)(-0.96)=0.04253(2)插值节点为xi=-1+ih(i=0,1,…,n),h=(b-a)/2=2/n由分段线性插值的余项估计:|f(x)-(x)|=|R(x)|≤Mh2/81|)251(175|50|)(|)251(50)(32222xxxfxxxf028.010125.0)()(max4211hhxRxfMx分段线性插值多项式的构造分段二次插值即:选取跟节点x最近的三个节点xi-1,xi,xi+1进行二次插值,即在区间[xi-1,xi+1],取:11112iikikjijikjikxxxxyxLxf)()()()(这种分段的低次插值叫分段二次插值,在几何上就是用分段抛物线代替y=f(x),故分段二次插值又为分段抛物插值。分段线性插值多项式的构造内容小结内容小结1.分段线性插值法;2.分段线性插值多项式的构造.命令格式1.插值多项式命令InterpolatingPolynomial求一个多项式,使给定的数据是准确的函数值,其调用格式如下:InterpolatingPolynomial[{f1,f2,…},x]当自变量x为1,2,3,…时的函数值为f1,f2,…。InterpolatingPolynomial[{{x1,f1},{x2,f2},…},x]当自变量值为xi时的函数值为fi。InterpolatingPolynomial[{{x1,{f1,df1,ddf1,…}},…},x]规定xi处的导数函数值为dfi。如果给定n+1个数据,则结果是n次多项式。命令后加//Expand,表示按升幂排列。例1:由下列已知条件求插值多项式。Xi1234yi12-11xi010.5yi121e当x=1时,y=2,y′=2,y″=1解:In[1]:=InterpolatingPolynomial[{1,2,-1,1},x]Out[1]=In[2]:=InterpolatingPolynomial[{{0,1},{1,Exp[-1]},{1/2,Exp[-1/2]}},x]Out[2]=)1()2()3(23211xxxxxeeee)1(1)11(2121111e(1)(2)(3)In[3]:=InterpolatingPolynomial[{{1,{2,2,1}}},x]Out[3]=)1()1(2122xx说明:上例中的输出结果表明,所得答案是准确结果,而不是近似函数。其中In[3]是给出当x=1时的函数值和一、二阶导数值,由3个条件得到一个二次多项式。InterPolation[{f1,f2,…}]当自变量值为1,2,3,…时的函数值为f1,f2,…。InterPolation[{{x1,f1},{x2,f2},…}]当自变量值为xi时的函数值为fi。InterPolation[{{x1,{f1,df1,ddf1,…}},…}]规定xi处的导数函数值为dfi。此外还有可选参数:InterPolationOrder→n指定插值多项式的次数(默认值为3)。2.插值函数函数InterPolation通过在数据点之间进行多项式插值,构造一个近似函数(分段插值函数),该函数通过已知的数据点,其调用格式如下:执行后返回的结果是形如:InterPolationFunction[domain,table]的插值函数,虽然形式特殊,但能当做普通函数名(如sin)一样理解:InterPolatingFunction[domain,table][x]就是求x处的函数值。不过无法直接键入或拷贝上式,使用时还应另起一个函数名来表示它。生成插值函数及其图形,并求当x=27.1时的函数值。Xi19.12530.1364015.150yi76.377.879.2580.882.3583.985.1例2.给出数据表如下:解:In[1]:=data={{19.1,76.3},{25,77.8},{30.1,79.25},{36,80.8},{40,82.35},{45.1,83.9},{50,85.1}};f=Interpolation[data]Out[2]=InterpolatingFunction[{{19.1,50.}},]In[3]:=pd=ListPlot[data,DisplayFunction-Identity,PlotStyle-PointSize[0.02]];fd=Plot[f[x],{x,19.1,50},DisplayFunctio-Identity];Show[{pd,fd},DisplayFunction-$DisplayFunction]Out[5]=-Graphics-In[6]:=f[27.1]Out[6]=78.3938说明:上例中生成的插值函数是用f表示的,Out[2]给出插值函数的定义域是[19.1,50],自变量可以用任何字符表示。由图13-47可知,给定的数据点在函数曲线上。f[x_]:=Exp[x]A=Table[{x,f[x]},{x,0,0.8,0.2}]//Ng1=ListPlot[Table[A],Prolog-AbsolutePointSize[18]];Interpolation[A,InterpolationOrder-3]g2=Plot[%[x],{x,0,0.8}]Show[g1,g2]N[%%%[0.12],20]N[%%%%[0.72],20]N[f[0.12],20]N[f[0.72],20]插值法主程序