参考书:《分形算法与程序设计》1第第66章章分形插值分形插值6.26.2随机中点位移法生成山随机中点位移法生成山6.36.3分形插值算法生成云和山分形插值算法生成云和山6.16.1插值插值6.1问题的提出–函数解析式未知,通过实验观测得到的一组数据,即在某个区间[a,b]上给出一系列点的函数值yi=f(xi)–或者给出函数表y=f(x)y=p(x)xx0x1x2……xnyy0y1y2……yn插值与曲线拟合插值与曲线拟合—动物实验中心为白鼠服用了某种新产品药物后,在对六对白鼠之食物消费量(克,x)及九周间增加之体重(克,y)测量数据如下:123456568608636636660684106126134134128158ixiyi试确定白鼠体重y与白鼠之食物消费量x的函数关系—血药浓度问题,为试验某种新药的疗效,研究人员对志愿者用快速静脉注射方式一次注入该药30mg后,在一定的时刻t(h)采取血样,测得血药浓度C(μg/ml)数据如下:123456789t(h)0.250.511.523468C(μg/ml)19.2118.1516.3614.1012.899.327.456.243.01i试确定血药浓度C与时间t的函数关系6.2插值法的基本原理设函数y=f(x)定义在区间[a,b]上,是[a,b]上取定的n+1个互异节点,且在这些点处的函数值为已知,即若存在一个f(x)的近似函数,满足则称为f(x)的一个插值函数,f(x)为被插函数,点xi为插值节点,称(6.1)式为插值条件,而误差函数R(x)=称为插值余项,区间[a,b]称为插值区间,插值点在插值区间内的称为内插,否则称外插nxxx,,,10L)(,),(),(10nxfxfxfL)(iixfy=)(xϕ),,2,1()()(nixfxiiL==ϕ)(xϕ(6.1))()(xxfϕ−插值函数在n+1个互异插值节点(i=0,1,…,n)处与相等,在其它点x就用的值作为f(x)的近似值。这一过程称为插值,点x称为插值点。换句话说,插值就是根据被插函数给出的函数表“插出”所要点的函数值。用的值作为f(x)的近似值,不仅希望能较好地逼近f(x),而且还希望它计算简单。由于代数多项式具有数值计算和理论分析方便的优点。所以本章主要介绍代数插值。即求一个次数不超过n次的多项式。)(xϕix)(ixf)(xϕ)(xϕ)(xϕ0111)(axaxaxaxPnnnn++++=−−L0111)(axaxaxaxPnnnn++++=−−L),,2,1,0()()(nixfxPiiL满足==则称P(x)为f(x)的n次插值多项式。这种插值法通常称为代数插值法。其几何意义如下图所示yy=P(x)y=f(x)y1ynx0x1xnx定理6.1n次代数插值问题的解是存在且惟一的证明:设n次多项式0111)(axaxaxaxPnnnn++…++=−−是函数在区间[a,b]上的n+1个互异的节点(i=0,1,2,…,n)上的插值多项式,则求插值多项式P(x)的问题就归结为求它的系数(i=0,1,2,…,n)。)(xfy=ixia由插值条件:(i=0,1,2,…,n),可得)()(iixfxp=⎪⎪⎩⎪⎪⎨⎧=++……++……=++……++=++……++−−−−−−)()()(01111011111100011010nnnnnnnnnnnnnnnnxfaxaxaxaxfaxaxaxaxfaxaxaxa这是一个关于待定参数的n+1阶线性方程组,其系数矩阵行列式为naaa,,,10L∏∏=−=−=……………=niijjinnnnnnxxxxxxxxxxxV110212110200)(111称为Vandermonde(范德蒙)行列式,因xi≠xj(当i≠j),故V≠0。根据解线性方程组的克莱姆(Gramer)法则,方程组的解存在惟一,从而P(x)被惟一确定。naaa,,,10…惟一性说明,不论用何种方法来构造,也不论用何种形式来表示插值多项式,只要满足插值条件(6.1)其结果都是相互恒等的。6.3拉格朗日(Lagrange)插值为了构造满足插值条件(i=0,1,2,…,n)的便于使用的插值多项式P(x),先考察几种简单情形,然后再推广到一般形式。6.3.1线性插值与抛物插值(1)线性插值线性插值是代数插值的昀简单形式。假设给定了函数f(x)在两个互异的点,的值,,现要求用线性函数近似地代替f(x)。选择参数a和b,使。称这样的线性函数P(x)为f(x)的线性插值函数。)()(iixfxp=0x1x)(),(1100xfyxfy==baxxp+=)()1,0)(()(==ixfxpii线性插值的几何意义:用通过点和的直线近似地代替曲线y=f(x)由解析几何知道,这条直线用点斜式表示为))(,(00xfxA))(,(11xfxB)()(001010xxxxyyyxp−−−+=10100101)(yxxxxyxxxxxp−−+−−=01011010)(,)(xxxxxlxxxxxl−−=−−=0)(,1)(1000==xlxl1)(,0)(1101==xlxl1)()(10=+xlxl为了便于推广,记这是一次函数,且有性质y=f(x)p(x)=ax+bA(x.0,f(x.0))B(x.1,f(x.1))⎩⎨⎧≠===)(0)(1)(kikixlkiikδ与称为线性插值基函数。且有)(0xl)(1xl1,0,)(10=−−=∏≠=kxxxxxlkjjjkjk于是线性插值函数可以表示为与基函数的线性组合1100)()()(yxlyxlxp+=例6.1已知,,求10100=11121=115=y解:这里x0=100,y0=10,x1=121,y1=11,利用线性插值1110012110010121100121)(×−−+×−−=xxxp714.10)115(115=≈=py(2)抛物插值抛物插值又称二次插值,它也是常用的代数插值之一。设已知f(x)在三个互异点x0,x1,x2的函数值y0,y1,y2,要构造次数不超过二次的多项式使满足二次插值条件:这就是二次插值问题。其几何意义是用经过3个点的抛物线近似代替曲线,如下图所示。因此也称之为抛物插值。0122)(axaxaxP++=)2,1,0()(==iyxPii),(),,(),,(221100yxyxyx)(xPy=)(xfy=yy=L2(x)y0y1y1y=f(x)Ox0x1x2xP(x)的参数直接由插值条件决定,即满足下面的代数方程组:210,,aaa210,,aaa⎪⎩⎪⎨⎧=++=++=++222221012121100202010yxaxaayxaxaayxaxaa⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡222211200111xxxxxx该三元一次方程组的系数矩阵的行列式是范德蒙行列式,当时,方程组的解唯一。210xxx≠≠为了与下一节的Lagrange插值公式比较,仿线性插值,用基函数的方法求解方程组。先考察一个特殊的二次插值问题:求二次式,使其满足条件:)(0xl0)(,0)(,1)(201000===xlxlxl这个问题容易求解。由上式的后两个条件知:是的两个零点。于是21,xx)(0xl))(()(210xxxxcxl−−=再由另一条件确定系数1)(00=xl))((12010xxxxc−−=))(())(()(2010210xxxxxxxxxl−−−−=从而导出类似地可以构造出满足条件:的插值多项式0)(,0)(,1)(210111===xlxlxl))(())(()(2101201xxxxxxxxxl−−−−=及满足条件:的插值多项式0)(,0)(,1)(120222===xlxlxl))(())(()(1202102xxxxxxxxxl−−−−=这样构造出来的称为抛物插值的基函数)(),(),(210xlxlxl取已知数据作为线性组合系数,将基函数线性组合可得210,,yyy)(),(),(210xlxlxl212021012101200201021))(())(())(())(())(())(()(yxxxxxxxxyxxxxxxxxyxxxxxxxxxP−−−−+−−−−+−−−−=容易看出,P(x)满足条件)2,1,0()(==iyxPii6.3.2拉格朗日插值多项式我们看到,两个插值点可求出一次插值多项式,而三个插值点可求出二次插值多项式。插值点增加到n+1个时,也就是通过n+1个不同的已知点,来构造一个次数为n的代数多项式P(x)。与推导抛物插值的基函数类似,先构造一个特殊n次多项式的插值问题,使其在各节点上满足),,1,0)(,(niyxii…=)(xliix0)(,,0)(,1)(,0)(,,0)(110=…===…=+−nkkkkkkkkxlxlxlxlxl⎩⎨⎧≠===)(0)(1)(kikixlkiikδ由条件()知,都是n次的零点,故可设0)(即=ikxlki≠nkkxxxxx,,,,,,1110……+−)(xlk)())(())(()(1110nkkkkxxxxxxxxxxAxl−…−−…−−=+−其中为待定常数。由条件,可求得kA1)(=kkxlkA1)(0=−∏≠=nkjjjkkxxA于是∏≠=−=nkjjjkkxxA0)(1代入上式,得∏∏∏≠=≠=≠=−−=−−=nkjjjkjnkjjjknkjjjkxxxxxxxxxl000)()()(称为关于基点的n次插值基函数(i=0,1,…,n))(xlkix以n+1个n次基本插值多项式为基础,就能直接写出满足插值条件的n次代数插值多项式。事实上,由于每个插值基函数都是n次值多项式,所以他们的线性组合),,1,0)((nkxlk…=),,2,1,0()()(nixfxPii…==nnyxlyxlyxlxP)()()()(1100+…++=),,1,0)((nkxlk…=∑==nkkkyxlxP0)()(是次数不超过n次的多项式,称形如(6.8)式的插值多项式为n次拉格朗日插值多项式。并记为(6.8))(xLn例6.2已知y=f(x)的函数表求线性插值多项式,并计算x=1.5的值X13y1225.1)5.1()5.1()1(2121311313)(10100101=≈+=×−−+×−−=−−+−−=pfxxxyxxxxyxxxxxp解:由线性插值多项式公式得例6.3已知x=1,4,9的平方根值,用抛物插值公式,求(x0–x1)(x0–x2)(x–x1)(x–x2)y0+(x1–x0)(x1–x2)(x–x0)(x–x2)y1+(x2–x0)(x2–x1)(x–x0)(x–x1)y2p2(7)=x0=1,x1=4,x2=9y0=1,y1=2,y2=3(1–4)(1–9)(7–4)(7–9)×1+(4–1)(4–9)(7–1)(7–9)×2+(9–1)(9–4)(7–1)(7–4)×3=2.7p2(x)=77=2.6458例6.4已知函数y=f(x)在节点上满足xx0x1x2yy0y1y2求二次多项式p(x)=a0+a1x+a2x2使之满足p(xi)=yii=0,1,2解:用待定系数法,将各节点值依次代入所求多项式,得解上述方程,将求出的a0,a1,a2代入p(x)=a0+a1x+a2x2即得所求二次多项式201202012120122aaxaxyaaxaxyaaxaxy++=++=++=001122例6.5求过点(0,1)、(1,2)、(2,3)的三点插值多项式13)12)(02()1)(0(2)21)(01()2)(0(1)20)(10()2)(1()(+=×−−−−+×−−−−+×−−−−=xxxxxxxxp解:由Lagrange插值公式(给定的三个点在一条直线上)212021012101200201021))(())(())(())(())(())(()(yxxxxxxxxyxxxxxxxxyxxxxxxxxxP−−−−+−−−−+−−−−=例6.6已知f(x)的观测数据x0124f(x)19233构造Lagrange插值多项式解四个点可构造三次Lagrange插值多项式:基函数为