logo资料库

数值分析教案.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
Newton 插值多项式 利用插值基函数很容易得到拉格朗日插值多项式,拉格朗日插值公式结构 紧 凑 , 在 理 论 分 析 中 甚 为 方 便 , 但 当 插 值 节 点 增 减 时 全 部 插 值 基 函 数 均要随之变化,不得不重新计算所有插值基函数 )(xli ,这 ( )( ixli 在实际计算中是很不方便的,为了克服这一缺点,引入了出具有承袭性质的牛  ,1,0 ), n 顿插值多项式,首先介绍在牛顿插值中需要用到的差商计算。 ◆ 差商 ( xf ), , xxx 0 , 1 , 2 为 一 系 列 互 不 相 等 的 点 , 称 ( i  为 )(xf 关于点 ) j i xx , 的一阶差商,记为 j , [ i xxf j ] ,即 设 有 函 数 ) ( xf i x i ( xf x   ) j j , [ xxf i j ]  ) ( xf i x i   ( xf x j ) j 1-14) 类似于高阶导数的定义,称一阶差商的差商 [ , xxf k x k ] , [ xxf j x i   j i ] 为 )(xf 关于 , xxx i , j k 的二阶差商,记为 [ , xxxf k , j i ] .一般地,称 , [ xxf 1 0 , ,  [ , xxf 2 1 ] x  1 k x x  0 k , ,  x k ] 为 )(xf 关于 )(xf 函 数 (=] xf 0 [ xf 0 , , , ] x k kx ,  [ , xxf 1 , [ xxf 1 , 1 xx 0  的 k 阶差商,记为 ]  x  k )(xf 关 于 0x 的 零 阶 差 商 即 为 函 数 ) 。 x 1 k  x 0 ,   , 0 0 , [ xxf 2 1 , ,  x k ] 在 0x 的 函 数 值 ,
容易证明,差商具有下述性质: (1)各阶差商均具有线性性,即若 )( xf  a   )( x b  )( x ,则对任意正整 数 k ,都有 [ , , , , , xxf x xx  1 0 1 0 k , [ , xxf  可表示成 (2) k 阶差商 1 [ a  ] ]  , kx , x  k ( xf 0 0 ]  ), [ b  ( xf 1 , , xx 1 0 ), ,  , x  k ( kxf ] ) 的线性组 合。 [ , xxxf , 1 0 ,  , x k ] 2  k  i  0 ( x i  x 0 )  ( x i  x i ) ( xf i )( x 1  i  x )  ( x i  x k ) i 1   k  i  0 ( xf ( 1   k ) i x i ) ( 1  k x i )  其中 ( x i  x j ) 。 k  j j   0 i 用归纳法可以证明这一性质。 1k 是显然的。 [ , xxxf , 1 0 ]  2 0 2k 时 , [ ] xxf 1 x 0 ( xf 1 x 1 )   )  ] 2 1 [ , xxf x 2 ) ( xf 1 x 1 ) ( xf 1 )( x x 1 0  1  x 2    x 0   ) ( xf 0 x 0 ( xf 0 )( x x 1 0   ( x 0  x 2 )  ( x 1  ) 2   ( xf x 2      x 2 ) ( x 2  ( xf )( x 0 ) 2 x 2  x 1 ) (1-16) (3)各阶差商均具有对称性,即改变节点的位置,差商值不变。如 [ , xxf i j [=] , xxf i j ] [ , xxxf k , j i [=] , xxxf , k i ]  j [ , xxxf k , i j ]
(4)若 )(xf 是 n 次多项式,则一阶差商 事实上,如果 )(xf 是 n 次多项式,则 ,[ ] ixxf )( xP  多项式,且 ( 0) ixP 。于是可分解为 是 1n 次多项式。 )( xf ( ixf  ) 也是 n 次 其中 Pn )(1 x (  )( xP x  为 1n 次多项式。所以 ) ,[ xxf i ]  )( xf x   ( xf i x i  ) Px i n )( 1 x  ( x  )( x 1  ) Px i n x x  i  P n 1  )( x 为 1n 次多项式。 ◆计算差商 按照差商定义,用两个 k-1 阶差商的值计算 k 阶差商,通常用差商表的形 式计算和存放(见表 1)。 由于差商对节点具有对称性,可以任意选择两个 k-1 差商的值计算 k 阶差 商。 xk x0 x1 x2 x3 [ , xxxf , 1 0 ]  2 1 , [ xxf 2 x ] 2   0 [ , xxf 1 x 0 ]  0 , [ xxf 2 x ] 2   0 [ , xxf 1 x 1 ] (1-18) 表 1 差商表 f(xk) 一阶差商 二阶差商 三阶差商 f(x0) 四阶差商 … f(x1) f[x0,x1] f(x2) f[x1,x2] f[x0,x1,x2] f(x3) f[x2,x3] f[x1,x2,x3] f[x0,x1,x2,x3]
x4 x5 f(x4) f[x3,x4] f[x2,x3,x4] f[x1,x2,x3,x4] f[x0,x1,x2,x3,x4] f(x5) f[x4,x5] f[x3,x4,x5] f[x2,x3,x4,x5] f[x1,x2,x3,x4,x5] 【例 1】给定函数 y  x )(xf )(xf -2 17 的函数表 0 1 1 2 2 17 写出函数 y  )(xf 的差商表。 解 差商表如下:(写牛顿插值多项式) ix -2 0 1 2 ) ( ixf 17 1 2 17 1 阶差商 2 阶差商 3 阶差商 -8 1 15 3 7 1 ◆ 牛顿插值(根据差商定义推导牛顿插值多项式) 根据差商定义,把 x 看成[a,b]上一点,可得 )( xf x 0x  ,[ xxf 0 ]  左右两端乘( )( ( xf xf  二阶差商: 0 )   ( xf 0 x 0 x  )移项得 ,[ ) ]( xxf 0 x  x 0 ) ,
] ,整理得: 0 ,[ ] xxf 0 x , [ xxf 1 [ , xxf  1 x  1 ]  0 ,[ , xxxf 1 0 ]( x  x 1 ) , ,[ , xxxf 1 0 ]  ,[ xxf 0 ]  …… 同理: ,[ xxf ,  , x ]  1 n 0 , [ xxf 1 0 ,  , x n ]  ,[ xxf ,  , x n 0 ]( x  x n ) . 只要把后一式代入前一式,就得到 [ , ) )( xxxf x xf  0 0 ( ) x x   1 0 n  )( )( xN x  ]( [ , xxf x 0 1 , ]( x x   , ] x  n ( ) xf  0 , [ , xxf 0 1 ,[ , xxxf 1    1 )   x n , 1  , 0 n n )( xR n ]( x  x 0 )( x  x 1 )   2 其中 )( xN n )( xR n 0 )  ]( ( [ , xxf xf x  0 0 1 [ , , ]( x x xxxf   0 2 1 [ ]( , , x x xf x    0 0 n )( ,[ )( xf xN xxf    )(1 x n = n - xx ) x  0 )( ) x x    1 ) ( ) x x   1 n )( , , ] x x  n - nxx )x- 1 0 ( n )  )( x 1  ( 0 (1-19) , (1-20) 则 显然, ( xR n i )( xf  )( xN n  )( xR n )(xNn 是至多 n 次的多项式。而由 ) x  , xxxfx i [)  n  1  ( , , , 2 1 n i 0]  ( i  ,2,1,0  ), n 即 得 ( xN n ( xf i )  i )  ( xf ( ) xN n i ) y  i i  ( i ,2,1,0 )(xNn 满 足 插 值 条 件 ,因而它是 )(xf 的 n 次插值多项式。这种形式的插值 。 这 表 明  ), n
多项式称为 Newton 插值多项式。 Newton 插值优点:每增加一个节点,插值多项式只增加一项,即 ,  , [) xxf 1 )( xN )( x  x n x 0 x 1 )( N      x x x 1  ( ) ( , 0 n n x n 1  ] 因此便于递推运算。而且 Newton 插值的计算量小于 Lagrange 插值。 由插值多项式的唯一性可知, n 次 Newton 插值多项式与 n 次 Lagrange ,它们只是表示形式不同。因此 Newton )( xN 插值多项式是相等的,即  )( xL n n 余项与 Lagrange 余项也是相等的,即 )( xR n   n 1  ,[)( xxfx ,  , x n ]  0 ( n f ( n )1 )(   )!1   n 1  )( x 由此可得差商与导数的关系 [ , xxf 1 0 ,  x ] , n f (泰勒系数: a k  )( n )(  ! n )( k f ( 0 x ! k ) )   ), ( , 其中  min 0 ni    , x i    i x max 0 ni  【例 2】对上例的中的 )(xf ,求节点为 1 , xxx 0 , 1 的二次插值多项式和节点为 2 0, xx 的一次插值多项式,节点为 , , , xxxx 1 0 3 8 [ xf x 1 的三次插值多项式。 3] xx 1 [ xf ] , , 2 , , , 2 0 0 [ xf 解 由 上 例 知 1] , , xxx 1 0 )( ) xN   1 0 (8 )(1 xN   , 4 2 ( xf 17 ( 0 xf ) 17 , ,于是有 ) [ , ]( x xxf  1 0 0 )2 81 x x   x
2 )( xN )( xN 2 )( xN 3 0 0 0 0 2 ( xf , ]( , ]( [ , [ ) ) xx x x xxf xf x      1 1 2 2 3 (3 )2 81 x x x x x      ]( , , , [ ]( ) [ ) ( xx x x x xf x xxf xf      1 0 0 0 1 0 , ) , , )( )( [ ]( xf x x x x x x xxx    2 1 1 0 4 0 2 3 ()2 3 2 (1 )1 x x x xx       2 x 4  x 2 2 0 )( x 1  )( x 0 x  x 1 )  x 1 )  4 x  1 【例 2】用 Newton 插值公式计算 ln11.5。 解 如果仍取 x 0  ,11 x 1  ,12 x 2  13 点作抛物线插值,按表 1 计算,结 果如下: xi 11 12 13 yi=lnxi 一阶差商 二阶差商 2.3979 2.4849 2.5649 0.0870 0.0800 -0.0035 1 x-11 (x-11)(x-12) N2(x)=2.3979+0.0870(x-11)-0.0035(x-11)(x-12) ln11.5≈N2(11.5) =2.3979+0.0870×0.5+0.0035×0.5×0.5 =2.442275 若加节点 x=10,14,ln10=2.3026,ln14=2.6391,用 lnx 四次插值多项式近似,则按表 1 计算结果如下: xi 10 11 12 13 yi=lnxi 一阶差商 二阶差商 三阶差商 四阶差商 2.3026 2.3979 2.4849 2.5649 -0.00415 -0.00350 0.00022 0.0953 0.0870 0.0800 1 x-10 12  10 k  k x ) ( (x-10)(x-11)
14 2.6391 0.0742 -0.00290 0.00020 -0.000005 所以 ln11.5≈N4(11.5) =2.3026+0.0953 ×1.5-0.004 ×1.5 ×1.5+0.00022 ×1.5 ×0.5×(-0.5)-0.000005×1.5×0.5×(-0.5) ×(-1.5) =2.4423522 13  10 k  k ( x ) ●牛顿插值的 MATLAB 实现 在 MATLAB 中实现牛顿插值的代码如下: function f = Newton(x,y,x0) %求已知数据点的牛顿插值多项式 %已知数据点的 x 坐标向量:x %已知数据点的 y 坐标向量:y %插值的 x 坐标:x0 %求得的牛顿插值多项式或在 x0 处的插值:f syms t; if(length(x) == length(y)) n = length(x); c(1:n) = 0.0; else disp('x 和 y 的维数不相等!'); return; end f = y(1); y1 = 0; l = 1; for(i=1:n-1) for(j=i+1:n) y1(j) = (y(j)-y(i))/(x(j)-x(i)); end c(i) = y1(i+1); l = l*(t-x(i)); f = f + c(i)*l; simplify(f); y = y1; if(i==n-1) if(nargin == 3) f = subs(f,'t',x0); else f = collect(f); f = vpa(f, 3); %将插值多项式展开
分享到:
收藏