在许多问题中,通常根据实验、观测或经验得到的函数表或离散点上的信息,去研究分析函数的有关特性。其中插值法是一种最基本的方法,以下给出最基本的插值问题——三次样条插值的基本提法:
对插值区间a,b进行划分:ax0x1xnb,函数yfx在节点
xi上的值yifxii0,1,2,n,并且如果函数Sx在每个小区间xi,xi1上
是三次多项式,于a,b上有二阶连续导数,则称Sx是a,b上的三次样条函数,如果Sx在节点xi上还满足条件
i0,1,n Sxiyi 则称Sx为三次样条插值函数。
三次样条插值问题提法:对a,b上给定的数表如下.
x x0 x1 …… xn y y0 y1 …… yn i0,1,n式,求一个分段三次多项式函数Sx满足插值条件Sxiyi 并在
插值区间a,b上有二阶连续导数。这就需要推导三次样条插值公式:
记fx在节点xi处的值为fximi(i0,1,n)(这不是给定插值问题数表中的已知值)。在每个小区间xi,xi1利用三次Hermite插值公式,得三次插值公式:
Sxixyii1xyi1iximii1mi1,xxi,xi1。为了得到这个公式需要4n个条件:
(1).非端点处的界点有2n个;(2).一阶导数连续有n1个条件;(3).二阶导数
1Sxm Sxm 连续有n1个条件,其中边界条件:○00nn2Sx Sx ○00n3SxSx SxSx ○304005n6n14yy Sx0Sx0 Sx0Sx0 ○0n0n0n0 , ij 其中:ixj ixj0 ixj0 且(i,j0,1)。
1, ij ixj0, ij ,mi为对应变量的一阶导数。其推导过程如下:
1, ij 为了确定mi的值,把Sx展开为:
Sxxxi12hi2xxihi3yixxi2hi2xi1xhi23yi1
+
xxi12xxihi2mixxi2xxi1himi1,
这里hixi1xi,对Sx连续求两次导,得:
Sx6x2xi4xi1hi2mi6x4xi2xi1hi2mi16xixi12xhi3yi1yi。于是
考虑Sx在节点xi处的右极限值,得: Sxi0426mimi12yi1yi。 hihihi 同理,在相邻小区间xi1,xi上可得Sx的表达式为:
Sx6x2xi14xihi12mi16x4xi12xihi12mi6xi1xi2xhi12yiyi1
及Sx在节点xi处的左极限值为:
Sxi0246yiyi1。mi1mi利用Sx二阶导数于节点xi处2hi1hi1hi1的连续性条件Sxi0Sxi0,这里i1,2,n1,有下式成立:
yi1yiyiyi1111111,用除等式两mi12mm3ii122hi1hihi1hihi1hi1hihi,边,并注意yifi yi1yifxi,xi1,上式可简记为: hi imi12miimi1gi i1,2,n1, 且ihihi1 i1i gi3ifxi1,xiifxi,xi1
hi1hihi1hi最后求得m1mn的线性方程组为:
2 1 0 0 0 1m1g1 mg2 0 0 02222 (**) 0 0 0 2 mgn1n1n1n1n 0 0 0 n 2mngn通过以上复杂的求解和迭代,就可以求解出插值函数的近似表达式。得出来的表达式就可以用MATLAB软件来求解。具体求解过程如下:
已知n对数据点x1,y1,x2,y2,x3,y3,xn,yn,,假设函数关系为
yfx,但解析式不确定,数据插值就是构造函数关系式ygx,使xii1,2,3,,n,满足关系gxifxi。
例题:求满足下面函数表所给出的插值条件的三次自然样条函数。
x 1 2 4 5 yfx 1 3 4 2
分析:表中所列出的是函数对点,首先要把对应的插值函数求出来,再用
MATLAB软件来求区间1,5上间隔为0.5的各点的值。
求解过程如下:
因自然样条插值函数的边界条件为 Sx0Sxn0,
,i这里n3,故确定m0,m1,m2,m3的方程组形式形如上面的(**)式,其中系数i 和gi可按如下步骤进行:
hi: h0211, h142 h2541;
i: 1 h1h221, 2;
h0h13h1h23i: 111 , 212gi: g131fx1,x21fx0,x19;2132 ;37 g232fx2,x32fx1,x2;2h6; g03fx0,x10y02h6. g33fx2,x32y32将上述参数带入(**)式,得到以下方程组:
2 1 0 0 62m091 2 033m12 12m72 20 3m3230 1 260
解得:
m0由公式
17759, m1, m2, m3. 8448Sxxxi12hi2xxihi3yixxi2hi2xi1xhi3yi1
+可知,
xxi12xxihi2mixxi2xxi1hi2mi1,
13227xxx1, x1,4884 Sx
3x345x2103x33, x4,5848由所求出的表达式可知区间1,5可分为1,44,5,对两个区间分别用MATLAB命令即可: 针对第一个区间:
127yx3x2x1; 其图像如下
8843.532.52y1.510.511.522.5x33.54
命令如下:
x=1:4;y=(-1/8)*x.^3+(2/8)*x.^2+(7/4)*x-1;xi=1:0.5:4; y1=interp1(x,y,xi,'spline') 其运行结果如下: y1 =
Columns 1 through 6
0.8750 1.7656 2.5000 2.9844 3.1250 2.8281
Column 7
2.0000 针对第二个区间: y
334521032xxx33 884
(资料素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
因篇幅问题不能全部显示,请点此查看更多更全内容