欧拉方法及其改进的欧拉方法的matlab实现

上传人:小** 文档编号:89193956 上传时间:2019-05-21 格式:PDF 页数:6 大小:209.18KB
返回 下载 相关 举报
欧拉方法及其改进的欧拉方法的matlab实现_第1页
第1页 / 共6页
欧拉方法及其改进的欧拉方法的matlab实现_第2页
第2页 / 共6页
欧拉方法及其改进的欧拉方法的matlab实现_第3页
第3页 / 共6页
欧拉方法及其改进的欧拉方法的matlab实现_第4页
第4页 / 共6页
欧拉方法及其改进的欧拉方法的matlab实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《欧拉方法及其改进的欧拉方法的matlab实现》由会员分享,可在线阅读,更多相关《欧拉方法及其改进的欧拉方法的matlab实现(6页珍藏版)》请在金锄头文库上搜索。

1、-1- 常微分方程初值问题的欧拉方法及其改进的欧拉方法 的 常微分方程初值问题的欧拉方法及其改进的欧拉方法 的 Matlab 实现实现 纪秀浩 辽宁工程技术大学理学院,辽宁阜新(123000) E-mail: 摘摘 要:要:欧拉(Euler)方法及改进的欧拉方法是解决常微分方程初值问题常用的数值解法, 但 Matlab 的工具箱中没有 Euler 方法的功能函数。本文在简要介绍 Euler 方法及其改进的 Euler 方法的基础上, 通过编写 Matlab 程序实现两种数值解法, 并通过作图形式对比其精度, 加深对两种方法的认识。 关键词:关键词:欧拉方法;改进的欧拉方法;matlab 实现

2、1引言引言 常微分方程是解决工程实例的常用的工具1,建立微分方程只是解决问题的第一步,通 常需要求出方程的解来说明实际现象, 并加以检验。 如果能得到解析形式的解固然是便于分 析和应用的,但是我们知道,虽然求解常微分方程有各种各样的解析方法,但解析方法只能 用来求解一些特殊类型的方程,实际问题终归结出来的微分方程主要靠数值解法2。数值解 法就是一个十分重要的手段,而欧拉方法又是数值解法最基础最常用的方法。 2. 欧拉方法、改进的欧拉方法及欧拉方法、改进的欧拉方法及 Matlab 实现实现 下面主要讨论一阶常微分方程的初值问题,其一般形式为: 00 ( , ) () yf x y y xy =

3、= (1) 我们知道,只要函数( , )f x y适当光滑譬如关于y满足利普希茨(Lipschitz)条件 ( , )( , )f x yf x yL yy 理论上就可以保证初值问题(1)的解( )yy x=存在并且唯一3。 所谓数值解法,就是求问题(1)在某些离散点 01N axxxb=?的近似值 012 , N yy yy?的方法。 012 , N yy yy?就称为问题(1)的数值解。 1nnn hxx + =成为 n x到 n x的步长,我们为了方便取为常量h。 2.1. 欧拉方法欧拉方法 2.1.1 欧拉方法欧拉方法 将微分方程离散化,用向前差商 1 ()() nn y xy x h

4、 + 代替微分 ( ) n y x,代入(1)中的微分方 程,可得 1 ()() (, ()(1,2,3,) nn nn y xy x f xy xn h + =? 化简可得 1 ()()(, ()(1,2,3,) nnnn y xy xf xy xhn + =+=? http:/ 中国中国科技论文在线科技论文在线 -2- 如果用 n y近似() n y x代入上式便可得到 1 () n y x + 的近似值 1n y + ,计算式为: 1 (,)(1,2,3,) nnnn yyf xy hn + =+=? (2) 这样问题(1)的近似解可通过求解下面的差分初值问题: 1 0 (,)(1,2,

5、3,) ( ) nnnn yyf xy hn yy a + =+= = ? (3) 得到,按(3)式由初值 0 y可逐次求出 12 ,y y?。 Eule 方法就是用差分方程初值问题(3)的解来近似微分方程初值问题(1)的解。即由公式 (3)算出() n y x的近似值。这组公式求问题(1)的数值解就是著名的欧拉(Euler)公式。 2.1.2 欧拉方法的误差估计欧拉方法的误差估计 对于Euler公式(3)我们看到,当1,2,n=?时公式右端的 n y都是近似的,所以用它计算 的 1n y + 会有累积误差,分析累积误差比较复杂,这里先讨论比较简单的所谓局部截断误差。 假定用(3)式时右端的

6、n y没有误差,即() nn yy x=那么由此算出 1 ()(, () nnnn yy xf xy xh + =+ (4) 局部截断误差指的是, 按(4)式计算由 n x到 1n x + 这一步的计算值 1n y + 与精确值 1 () n y x + 之差 11 () nn y xy + 。为了估计它,由Taylor展开得到的精确值 1 () n y x + 是 2 3 1 ()()()()() 2 nnnn h y xy xhy xy xO h + =+ (5) (4)、(5)两式相减(注意到 ( , )yf x y=)得 2 32 11 ()()()() 2 nnn h y xyy x

7、O hO h + =+ (6) 即局部截断误差是 2 h阶的,而数值算法的精度定义为:若一种算法的局部截断误差为 1 () p O h + ,则称该算法具有p阶精度。显然p越大,方法的精度越高。式(6)说明,Euler 方法是一阶方法,因此它的精度不高。 2.2 改进的欧拉方法改进的欧拉方法 2.2.1 改进的欧拉方法改进的欧拉方法 用数值积分方法离散化问题(1),两端积分可得 1 1 ()()( , ( )(0,1,2,) n n x nn x y xy xf x y x dxn + + = ? 对右端积分使用梯形公式可得, 1 11 ( , ( ) (, ()(, () 2 n n x n

8、nnn x h f x y x dxf xy xf xy x + + + 再用 1 , nn yy + 代替 1 (), () nn y xy x + ,则得计算公式 111 (,)(,) 2 nnnnnn h yyf xyf xy + =+ (7) http:/ 中国中国科技论文在线科技论文在线 -3- 很明显可以注意到(7)式为隐式形式。 改进的欧拉方法是先用欧拉公式求 1 () n y x + 的一个近似值 1n y + ,称为预测值,然后用梯 形公式进行矫正并求得近似值 1n y + 。即 1 111 (,) (,)(,) 2 nnnn nnnnnn yyf xy h h yyf xy

9、f xy + + =+ =+ (8) 2.2.2 改进的欧拉方法的误差估计改进的欧拉方法的误差估计 由(7)式可知, 11 23 2 4 3 4 ()() ()() 2 ()“()“() 23! ()()()()() 22 ()() 12 nnnn nnn nnnn n h y xy xy xy x hh hy xyxyx hh y xy xhyxyxO h h yxO h + + =+ + = + 所以改进的欧拉方法是二阶的,精度较欧拉方法要高,实用性更加广泛。 3实验及结果分析实验及结果分析 3.1 欧拉方法的欧拉方法的 matlab 实现及实例实现及实例 欧拉方法的 Matlab 实现程

10、序如下: function x,y=euler(fun,x0,xfinal,y0,n); if nargin5,n=50; end h=(xfinal-x0)/n; x(1)=x0;y(1)=y0; for i=1:n x(i+1)=x(i)+h; y(i+1)=y(i)+h*feval(fun,x(i),y(i); end 例4 求解初值问题 2 (01) (0)1 x yyx y y = = (9) 解 编写函数文件 doty.m 如下: function f=doty(x,y); f=y-2*x/y; 在 Matlab 命令窗口输入: x,y=euler(doty,0,1,1,10) h

11、ttp:/ 中国中国科技论文在线科技论文在线 -4- 便可得到结果: x=0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y=1 1.1000 1.1918 1.2774 1.3582 1.435 11.5090 1.5803 1.6498 1.7178 1.7848 初值问题(6)的精确解为:12yx=+, 此时对应 n x的精确解() n y x可编程: y1=sqrt(1+2.*x) 得到 y1=1 1.0954 1.1832 1.2649 1.3416 1.4142 1.4832 1.549

12、2 1.6125 1.6733 1.7321 下面通过作图比较欧拉数值解与精确解之间的误差,编程:plot(x,abs(y-y1),*),可得到 图 2-1: 00.10.20.30.40.50.60.70.80.91 0 0.01 0.02 0.03 0.04 0.05 0.06 图 2-1 欧拉数值解与精确解的误差图 从图中可以看出欧拉方法精度很差。 3.1 改进欧拉方法的改进欧拉方法的 matlab 实现实现 为了编程方便,常把(5)式改写为: 1 1 (,) (,)(,) 2 1 () 2 pnnn qnnnnp npq yyf xy h h yyf xyf xy yyy + + =+

13、 =+ =+ 则 Matlab 实现程序为: function x,y=eulerpro(fun,x0,xfinal,y0,n); if nargin5,n=50; end h=(xfinal-x0)/n; x(1)=x0;y(1)=y0; for i=1:n x(i+1)=x(i)+h; y1=y(i)+h*feval(fun,x(i),y(i); y2=y(i)+h*feval(fun,x(i+1),y1); http:/ 中国中国科技论文在线科技论文在线 -5- y(i+1)=(y1+y2)/2; end 仍然选用上面的实例(6),函数 doty.m 文件相同,在 Matlab 命令窗口

14、中输入: x,y=eulerpro(doty,0,1,1,10) 便可得到 x=0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y=1 1.0959 1.1841 1.2662 1.3434 1.4164 1.4860 1.5525 1.6165 1.6782 1.7379 y1=1 1.0954 1.1832 1.2649 1.3416 1.4142 1.4832 1.5492 1.6125 1.6733 1.7321 y 为改进的欧拉数值解,y1 为精确解。从上面的数据可看出,改进的欧拉方法有较

15、好的精确 度。作图 plot(x,abs(y-y1),*)可得到误差如图 2-2: 00.10.20.30.40.50.60.70.80.91 0 1 2 3 4 5 6 x 10 -3 图 2-2 改进的欧拉方法数值解与精确解的误差图 4总结总结 本文通过编程实现了常微分方程初值问题数值解法中的欧拉方法及其改进的算法, 并比 较了其数值解与精确解之间的误差。 可以看出欧拉方法得到的数值解精确度较差, 而改进的 欧拉方法得到的结果则相对较好。 http:/ 中国中国科技论文在线科技论文在线 -6- 参考文献参考文献 1 王高熊,周之铭,朱思铭,等数值计算原理M 北京:清华大学出版社,2000 2 李庆扬,王能超,易大义 数值分析M 北京:清华大学出版社,施普林格出版社,2001 3 李庆扬,关治,白峰杉数值计算原理M 北京:清华大学出版社,2000 4 李庆扬,王能超,易大义数值分析M 武汉:华中科技大学出版社,2001 Matlab Programing For Eulers Metho

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号