1 大学数学实验 Experiments in Mathematics 实验3 插值与数值积分 清华大学数学科学系 实验3的基本内容 3.数值积分的梯形公式、辛普森公式和高斯公式。 1.插值的基本原理; 三种插值方法:拉格朗日插值,分段线性 插值,三次样条插值。 2.插值的 MATLAB 实现及插值的应用。 4.数值积分的 MATLAB 实现及数值积分的应用。 什么是插值? 从查函数表说起 查函数表 ∫ ∞? ? =Φ x t dtex 2 2 2 1 )( π x 012 … ┇┇ ┇ ┇┇ 1.0 0.8413 0.8438 0.8461 … 1.1 0.8643 0.8665 0.8686 … 1.2 0.8849 0.8869 0.8888 … ┇┇ ┇ ┇┇ 标准正态分布函数表 求 Φ (1.114) Φ(1.114)=0.8665+ (0.8686?0.8665)×0.4=0.8673 插 值 插值的基本原理 插值问题的提法 已知 n+1个节点 ,,1,0(),( njyx jj L= 其中 j x 互不相同,不妨设 ), 10 bxxxa n =<<<= L 求任一插值点 )( * j xx ≠ 处的插值 . * y ? ? ? ? ? 0 x 1 x n x 0 y 1 y 节点可视为由 )( xgy = 产生 , g表达式复杂 , 甚至无表达式 ? * x * y ? ? ? ? ? 0 x 1 x n x 0 y 1 y 求解插值问题的基本思路 构造一个(相对简单的)函数 ),(xfy = 通过全部节点,即 ),1,0()( njyxf jj L== 再用 )(xf 计算插值,即 ).( ** xfy = ? * x * y 插值的 基本原理 1.拉格朗日(Lagrange)多项式插值 1.0 插值多项式 )1()( 01 1 1 axaxaxaxL n n n nn ++++= ? ? L ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? = ? ? n n n n n n nn y y Y a a A xx xx X MM L L L 0 0 1 1 00 ,, 1 1 在什么条件下)(0)det( ≠XQ ),1,0()( njyxL jjn L== )2(YXA = 求 i a 三种插值 方法 有唯一解)2(∴ 2 1.1 拉格朗日插值多项式 ni xxxxxxxx xxxxxxxx xl niiiiii nii i L LL LL 1,0, )())(()( )())(()( )( 110 110 = ???? ???? = +? +? )3()()( 0 xlyxL i n i in ∑ = = jjnji yxL ji ji xl =∴ ? ? ? ≠ = = )( ,0 ,1 )(Q 又( 2)有唯一解,故( 3)与( 1)相同。 基函数 () i lx )1()( 01 1 1 axaxaxaxL n n n nn ++++= ? ? L )2(YXA= 三种插值 方法 ),(),( )!1( )( )()()( 0 )1( baxx n g xLxgxR n j j n nn ∈? + =?= ∏ = + ξ ξ 1 )1( )( + + ≤ n n Mg ξ 减小(粗略地看)如何使误差 )(xR n 平缓g j xx 接近 ∏ = + ? + ≤ n j j n n xx n M xR 0 1 )!1( )( 三种插值 方法 1.2 误差估计 增加n 1.3 拉格朗日插值多项式的振荡 ?)(?)( ↓??↑ xRxLn nn 55, 1 1 )( 2 ≤≤? + = x x xg 63.363.3),()(lim ≤≤?= ∞→ xxgxL n n Runge现象 取 n=2,4,6,8,10,计 算 L n (x), 画出图形 -5 0 5 -1.5 -1 -0.5 0 0.5 1 1.5 2 y=1/(1+x 2 ) n=2 n=4 n=6 n=8 n=10 三种插值 方法 Matlab.lnk Runge.m 2.分段线性插值 ? ? ? ? ? ? x j x j-1 x j+1 x 0 x n ? ? ? ? ? ? ? ? ? ? ? ≤≤ ? ? ≤≤ ? ? = = + + + ? ? ? = ∑ 其它,0 , , )( )()( 1 1 1 1 1 1 0 jj jj j jj jj j j n j jjn xxx xx xx xxx xx xx xl xlyxI 计算量与n无关; n越大,误差越小. nn n xxxxgxI ≤≤= ∞→ 0 ),()(lim 三种插值 方法 机翼下轮廓 线 3. 三次样条插值 样条函数的由来 飞机、船体、汽车外形等的放样(设计) 细木条:样条 3. 三次样条插值 },1],,[),({)( 1 nixxxxsxS iii L=∈= ? ],[)()3 ),1,0()()2 ),1()()1 0 2 23 n ii iiiii xxCxS niyxS nidxcxbxaxs ∈ == =+++= L L 数学样条( spline) iiii dcba n ,,, 4 个待定系数 3) )1,1()()( )()(),()( 1 11 ?=′′=′′ ′=′= + ++ nixsxs xsxsxsxs iiii iiiiiiii 3 ’ ) 2), 3 ’ )共 4n-2个方程 三种插值 方法 3 自然边界条件)(0)()()4 0 =′′=′′ n xSxS )(,,,)4)3)2 xSdcba iiii ?? 三次样条插值确定4n个系数需增加 2个条件 思考 1)自然边界条件的几何意义是什么? 2)样条插值为什么普遍用3次多项式, 而不是2或4次? 三次样条 插值 ).()(lim xgxS n = ∞→ 三种插值方法小结 ? 拉格朗日插值(高次多项式插值): 曲线光滑;误差估计有表达式;收敛性 不能保证(振荡现象)。 用于理论分析,实际意义不大 。 ? 分段线性和三次样条插值(低次多项式插值): 曲线不光滑(三次样条插值已大有改进);误差估 计较难(对三次样条插值);收敛性有保证。 简单实用,应用广泛 。 1. 拉格朗日插值:自编程序,如名为 lagr.m 的 M文件, 第一行为 function y=lagr(x0,y0,x) 输入:节点 x0,y0, 插值点 x (均为数组,长度自定义)); 输出:插值 y (与 x同长度数组))。 应用时输入 x0,y0,x后,运行 y=lagr(x0,y0,x) 2. 分段线性插值:已有程序 y=interp1(x0,y0,x) 3. 三次样条插值:已有程序 y=interp1(x0,y0,x,’spline’) 或 y=spline(x0,y0,x) 用 MATLAB作插值计算 注: lagr.m 程序 可参考课本; MATLAB有样条工具箱( Spline Toolbox) 用 MATLAB作插值计算 55, 1 1 )( 2 ≤≤? + = x x xg 为例,作三种插值的比较以 0 1.0000 1.0000 1.0000 1.0000 0.5000 0.8000 0.8434 0.7500 0.8205 1.0000 0.5000 0.5000 0.5000 0.5000 1.5000 0.3077 0.2353 0.3500 0.2973 2.0000 0.2000 0.2000 0.2000 0.2000 2.5000 0.1379 0.2538 0.1500 0.1401 3.0000 0.1000 0.1000 0.1000 0.1000 3.5000 0.0755 -0.2262 0.0794 0.0745 4.0000 0.0588 0.0588 0.0588 0.0588 4.5000 0.0471 1.5787 0.0486 0.0484 5.0000 0.0385 0.0385 0.0385 0.0385 x y y1 y2 y3 用 n=11个节 点, m=21个 插值点,三 种方法作插 值,画图。 Matlab.lnk chazhi1 插值的应用 加工时需要 x每 改变 0.05时的 y值 MATLAB 5.3.lnk chazhi2 图1 零件的轮廓线 ( x间隔 0.2) 表 1 x间隔 0.2的加工坐标 x,y(图 1右半部的数据) 数控机床加工零件 ………2.6,0.642.4,0.742.2,0.862.0,1.00 1.8,1.181.6,1.401.4,1.691.2,2.051.0,2.50 0.8,3.050.6,3.680.4,4.310.2,4.710.0,5.00 模型 将图 1逆时针方向转 90度,轮廓线上下 对称,只需对上半部计算一个函数在插值点 的值。 图 2 逆时针方向转 90度的结果 -5 -4 -3 -2 -1 0 1 2 3 4 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 u v 令 v=x, u=-y 为什么要作数值积分 ? 许多函数“积不出来”,只能用数值方法,如 dx x x dxe b a b a x ∫∫ ? sin , 2 2 ? 积分是重要的数学工具,是微分方程、概率 论等的基础;在实际问题中有直接应用。 ? 对于用离散数据或者图形表示的函数 , 计算积分只有求助于数值方法。 数值 积分 4 n ab fIIdxxfI n k knn n b a ? === ∑ ∫ = ∞→ )(,lim)( 1 ξ 数值积分的基本思路 回忆定积分的定义 各种数值积分方法研究的是 k ξ ),( ba如何取值,区间 如何划分, 使得既能保证一定精度,计算量又小。 n充分大时 I n 就是 I的数值积分 1.从矩形公式到梯形公式数值积分 y y=f(x) xb a o )1( 1 0 ∑ ? = = n k kn fhL )(, , 10 kk nk xff n ab h bxxxxa = ? = =<<<= LL )2( 1 ∑ = = n k kn fhR nn RL , 平均,得到 梯形公式 )3()( 2 0 1 1 n n k kn ff h fhT ++= ∑ ? = x k+1 x k x k-1 f k 2.辛普森(Simpson)公式 (抛物线公式) 梯形公式相当于用 分段线性插值函数 代替 )(xf 每段要用相邻 两小区间 端点的三个函数值 抛物线 公式 提高精度 分段二次插值函数 2 2 21 21 22 22 (,),( , ),( , ) 0, 1, , 1 kk k k k k xf x f x f km ++ ++ =?L 数值积分 y y=f(x) xb a o x 2k f 2k x 2k+1 x 2k+2 f 2k+1 f 2k+2 区间数必须为偶数 mn 2= )4( 2 ),24( 3 1 1 2 1 0 1220 m ab hffff h S m k k m k kmm ? =+++= ∑∑ ? = ? = + 对 k求和 (共 m段),得 辛普森公式 : )4( 3 )( 22122 22 2 ++ ++= ∫ + kkk x x k fff h dxxs k k 二次插值函数 s k (x)构造用 ),(),,(),,( 2222121222 ++++ kkkkkk fxfxfx 2.辛普森(Simpson)公式(抛物线公式) ∫ ?= b a nn TdxxfTfR )(),( 梯形公式在每小段上是用 线性插值函数 T(x)代替 f(x) ),(,),)(( 2 )( )()( 11 ++ ∈?? ′′ += kkkkk k xxxxxxx f xTxf η η 梯形公式 的误差估计 )( 2 0 1 1 n n k kn ff h fhT ++= ∑ ? = ∫ ≈ b a dxxf )( )( 12 ))(( 2 )( )]()([ 3 1 11 k x x kk k x x f h dxxxxx f dxxTxf k k k k ξ ξ ′′?=?? ′′ =? ∫∫ ++ + 因为: (x-x k )(x-x k+1 )在 (x k ,x k+1 )不变号,所以: )5()( 12 |),(| 2 2 abM h TfR n ?≤ 即 梯形公式 T n 的 误差是 h 2 阶的 ),(,)(max 2 baxxfM ∈′′= 估计 h ab n ? =因为 ∑ ? = ′′≤ 1 0 3 )( 12 |),(| n k kn f h TfR ξ 梯形公式 的误差 ))(')('( 12 1 )( 12 1 )( 12 )( '' 2 1 0 3 afbfdxxf h TI f h TdxxfTI b a n n k k b a nn ??=?→ ? ′′?=?=? ∫ ∑ ∫ ? = ξ 5 同理可得: )6()( 180 |),(| 4 4 abM h SfR n ?≤ 其中 ),(,)(max )4( 4 baxxfM ∈= 即 辛普森公式 S n 的误差是 h 4 阶的 。 辛普森公式的误差估计 梯形公式和辛普森公式的收敛性 若对 I某个数值积分 I n 有 c h II p n n = ? ∞→ lim (非零常数) 则称 I n 是 p 阶收敛的 。 梯形公式 2 阶收敛,辛普森公式 4 阶收敛。 积分步长的自动选取 选定数值积分公式后,如何确定步长 h以满足给定的误差 ε ))()(( 12 '' 2 afbf h TI n ??≈?梯形公式 )( 4 1 2 nn TITI ?≈? ε≤? nn TT 2 用二分法只要 其中 f k+1/2 是原分点 x k ,x k+1 的中点 ( 记 x k+1/2 ) 的函数值 ∑ ? = + += 1 0 2 12 22 n k k n n f hT T 且 T 2n 可在 T n 基础上计算 )( 3 1 22 nnn TTTI ?≈? ε≤? n TI 2 )2( 2 nn h h →→ 高斯(Gauss)求积公式 矩形公式 (1)、 (2) 梯形公式 (3) 辛普森公式 (4) A k 是与 f无关的常数 代数 精度 设 ,)( k xxf = 用 (7)计算 ,)( ∫ = b a dxxfI 若对于 mk L,1,0= 都有 ,II n = 而当 ,,1 IImk n ≠+= 则 称 I n 的代数精度为 m. )7()( 1 ∑ = = n k kkn xfAI Newton -Cotes 方法 梯形公式的代数精度(考察 T 1 ) k=1 f(x)=x 2 22 ab xdxI b a ? == ∫ 2 ))(( )]()([ 2 1 baab bfaf h T +? =+= 3 33 2 ab dxxI b a ? == ∫ 2 ))(( 22 1 baab T +? = k=2 f(x)=x 2 IT = 1 IT ≠ 1 梯形公式的代数精度为 1 辛普森公式的代数精度为 3 高斯公式的思路 取消对节点的限制,按照代数精度最大 的原则,同时确定节点 x k 和系数 A k 构造求积公式 )()( 22112 xfAxfAG += 对于 ∫ ? = 1 1 )( dxxfI 使G 2 的代数精度为3 32 ,,,1)( xxxxf = )()()( 2211 1 1 xfAxfAdxxf += ∫ ? 确定 2121 ,,, AAxx 6 0 3/2 0 2 3 2 2 3 1 1 2 22 2 11 2211 21 =+ =+ =+ =+ xAxA xAxA xAxA AA 将f(x)代入计算得 1,3/1,3/1 2121 ===?= AAxx )3/1()3/1( 2 ffG +?= 用 n个节点, G n 的代数精度可达 2n-1, 但是需解 复杂的非线性方程组,实用价值不大。 常用的高斯公式 将( a,b)分小,把小区间变换为(-1,1), 再用 G 2 ∑ ∫ = +? m k kk b a zfzf h dxxf 1 )2()1( )]()([ 2 )( 32 2 , 32 2 1)2(1)1( hxx z hxx z kk k kk k ? + =+ + = ?? mkkhaxmabh k L,1,0,,/)( =+=?= 代数精度为 3 思路:将积分区间分小,在小区间上用 n不太 大 的 。而在节点加密一倍时能够利用原节点的函 数值,需要把区间的端点作为固定节点。可以改 进高斯公式 改进的高斯公式 n G )()()( 1 2 1 bfAxfAafAG n n k kkn ++= ∑ ? = Gauss-Lobatto求积公式 其中 a, b为小区间的端点, nn AAxx LL ,,,, 112 ? 为 2n-2个参数, 代数精度可达到 2n-3 用 MATLAB 作数值积分 ∑ ? = = 1 0 n k kn fhL ∑ = = n k kn fhR 1 矩形 公式 Sum(x) 输入数组 x(即 f k ),输出 x的和(数) cumsum(x) 输入数组 x,输出 x的依次累加和(数组) 梯形 公式 )( 2 0 1 1 n n k kn ff h fhT ++= ∑ ? = trapz(x) 输入数组 x,输出按梯形公式 x的积分(单位步长 ) trapz(x,y) 输入同长度数组 x,y,输出按梯形公式 y对 x的积分(步长不一定相等) 用 MATLAB 作数值积分 m ab hffff h S m k k m k kmn 2 ),24( 3 1 1 2 1 0 1220 ? =+++= ∑∑ ? = ? = + 辛普森公式 quad(@fun,a,b,tol) 用自适应辛普森公式计算 tol为绝对误差,缺省时为 10 -6 Gauss-Lobatto公式 )()()( 1 2 1 bfAxfAafAG n n k kkn ++= ∑ ? = quadl(@fun,a,b,tol) 用自适应 Gauss-Lobatto公式计算 tol为绝对误差,缺省时为10 -6 矩形域上计算二重积分的命令: dblquad(@fun,xmin,xmax,ymin,ymax,tol) fun是被积函数 二重和三重积分 长方体上计算三重积分的命令: triplequad(@fun,xmin,xmax,ymin,ymax, zmin,zmax,tol) fun是被积函数 7 用 MATLAB 作数值积分 例 . 计算 4 0 1 1sin dx x π ? ∫ 1)矩形公式和梯形公式 将(0, π /4)100等分 2)辛普森公式和 Gauss-Lobatto公式 精确、方便 无法计算用数值给出的函数的积分 MATLAB 5.3.lnk Jifen1.m 数值积分的应用 实例 人造卫星轨道长度 )20( sin,cos π≤≤ == t tbytax 决定由 短半轴 长半轴 rss b a ,, ~ ~ 21 dttbtadtyxL ∫∫ +=+= 2 0 2222 2 0 22 cossin44 ππ && 轨道长度 y x o 近地点 s 1 =439km,远地点 s 2 = 2384km s 1s 2 地球半径 r=6371km r 需要作数值积分 s 1 =439km, s 2 = 2384km, r=6371km y x o s 1s 2 r s 1 s 2 y x o r a c b 决定由短半轴长半轴 rssba ,,,~,~ 21 数值积分实例 人造卫星轨道长度 dttbtaL ∫ += 2 0 2222 cossin4 π 12 22 ssra ++= 7782.5 2 12 = + += ss ra 1 srac ??=焦距 2 12 ss c ? = 7721.5 22 =?= cab dttbtaL ∫ += 2 0 2222 cossin4 π 用梯形公式和辛普森公式计算 只将区间 5等分,梯形公式就给出很好的结果 轨道长度 L=4.8707×10 4 千米 数值积分实例 人造卫星轨道长度 MATLAB 5.3.lnk Jifen2.m 布置实验 目的 1、掌握用 MATLAB计算拉格朗日、分段线性、三次样 条三 种插值的方法,改变节点的数目,对三种插值 结果进行初步分析。 2、掌握用 MATLAB及梯形公式、辛普森公式计算数值 积分。 3、 通过实例学习用插值和数值积分解决实际问题。 内容 课上布置,或参见网络学堂