四川理工学院数学系 课程设计任务书
专业: 信息与计算科学
班级: 信息与计算科学2012级1班
课程名称: 微分方程数值解课程设计
学生姓名: 陈古月 陈镜 李明轩 赵树微 黄冲冲
发题时间: 2015 年 4 月 27 日
一、课题名称
显式Euler方法和改进Euler方法的精度。 二、课题条件 参考文献:
[1].张平文,李铁军. 数值分析. 北京:北京大学出版社,2009. [2].徐瑞,黄兆东,阎凤玉.Matlab 科学与工程分析.北京:科学出版社,2007.
[3].曾金平,杨余飞,关力. 微分方程数值解. 北京:科学出版社,2011. 三、设计任务
分别用显式Euler方法和改进Euler方法求解下列微分方程:
22??y?t??y?t??sin??t???sin??t??1???y?0??1
t?0,50?yt?cos??t? 模拟区间为?。 上述方程的真解为??。参数?分别取为??0.8,2,5,8, 步长分别取为
h??t,?t?t?t?t?t?t?t?t,,,,,,,248163264128256(其中?t?0.1)。
要求
画出每一个?参数、每一种步长情况下数值解和真解之间差的绝对值,
50??Err?yn?y?tn?,n?1,2,,N?其中N??h?; ?即
对于每一个参数?,列表说明显式Euler方法和改进Euler方法的阶
maxyn?y?tn?1?n?5/h?1maxyn?y?tn??h?1?n?5/???2?为1,即步长为h和h/2时的全局误差之比: ⑶、给出程序清单。必须说明程序中哪些是主程序,哪些是子程序;
程序中必须有详细的注释和参数说明;必须简明扼要地说明如何运行程序。
问题求解:
一, 工具:Matlab数学软件
二,分析:
用Euler公式y n+1= yn+h f(xn,yn)求数值解的方法成为Euler方法。
三,算法及求解过程 算法: 1. 2. 3.
输入函数f(x,y)、初值y0、自变量区间端点a,b步长h 计算节点数n和节点x k
用Euler公式y n+1= yn+h f(xn,yn) 求数值解
Euler方法程序
Clear[x,y,f]
f[x_,y_]= Input[\函数f(x,y)=\y0=Input[\初值y0 =\a=Input[\左端点a=\b=Input[\右端点b=\h=Input[\步长h=\n=(b-a)/h; For[i=0,i y1=y0+h*f[xk,y0]; Print[\y0=y1] 程序中变量说明 f[x,y]: 存放函数f(x,y) y0: 存放初值y0及数值解 a:存放自变量区间左端点 b: 存放自变量区间右端点 n: 存放节点个数 h: 存放节点步长 xk:存放节点xi y1: 存放数值解 注:(1)语句Print[\是将数值解用6位有效数字显示出来,如果要显示n位数有效数字,可以将语句改为Print[\ (2)Mathematica中有求微分方程初值问题数值解的命令,形式为: NDSolve[ {y’[x]==f[x,y[x]],y[a]==y0}, y, {x, a, b}] 由NDSolve命令得到的解是以{{未知函数名->InterpolatingFunction[range, <>]}}的形式给出的,其中的 InterpolatingFunction[range, <>]是所求的插值函数表示的数值解, range就是所求数值解的自变量范围。 执行程序: 执行Euler方法程序后,在输入的窗口中按提示分别输入y-2x/y、1、0、1、0.1,每次输入后用鼠标点击窗口的“OK”按扭,计算机在屏幕上给出如下数值解结果。 y(0.1)=1.1 y(0.2)=1.19182 y(0.3)=1.27744 y(0.4)=1.35821 y(0.5)=1.43513 y(0.6)=1.50897 y(0.7)=1.58034 y(0.8)=1.64978 y(0.9)=1.71778 y(1.)=1.78477 本题的准确解为y(x)= (1 + 2 x)1/2,在一个坐标系中画出数值解与准确解的图形如下。 图中点图是数值解,曲线为准确解。从图中可以知道数值解与准确解比较接近,但还是有误差的。 由于Euler方法的计算精度不高,在实用中我们一般不使用此算法。 改进的Euler方法算法 1. 输入函数f(x,y)、初值y0、自变量区间端点a,b步长h 2.计算节点数n和节点x k 3.用改进的Euler公式求数值解 改进的Euler方法程序