欢迎来到天天文库
浏览记录
ID:35973247
大小:47.58 KB
页数:9页
时间:2019-04-29
《微分方程数值解课程设计第二组.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、四川理工学院数学系课程设计任务书专业:信息与计算科学班级:信息与计算科学2012级1班课程名称:微分方程数值解课程设计学生姓名:陈古月陈镜李明轩赵树微黄冲冲发题时间:2015年4月27日一、课题名称显式Euler方法和改进Euler方法的精度。二、课题条件参考文献:[1].张平文,李铁军.数值分析.北京:北京大学出版社,2009.[2].徐瑞,黄兆东,阎凤玉.Matlab科学与工程分析.北京:科学出版社,2007.[3].曾金平,杨余飞,关力.微分方程数值解.北京:科学出版社,2011.三、设计任务分别用显式Euler方法和改进Eul
2、er方法求解下列微分方程:模拟区间为。上述方程的真解为。参数分别取为,步长分别取为(其中)。要求画出每一个参数、每一种步长情况下数值解和真解之间差的绝对值,即;对于每一个参数,列表说明显式Euler方法和改进Euler方法的阶为1,即步长为和/2时的全局误差之比:⑶、给出程序清单。必须说明程序中哪些是主程序,哪些是子程序;程序中必须有详细的注释和参数说明;必须简明扼要地说明如何运行程序。问题求解:一,工具:Matlab数学软件二,分析:用Euler公式yn+1=yn+hf(xn,yn)求数值解的方法成为Euler方法。三,算法及求解过
3、程算法:1.输入函数f(x,y)、初值y0、自变量区间端点a,b步长h2.计算节点数n和节点xk3.用Euler公式yn+1=yn+hf(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,i4、/N];y0=y1]程序中变量说明f[x,y]:存放函数f(x,y)y0:存放初值y0及数值解a:存放自变量区间左端点b:存放自变量区间右端点n:存放节点个数h:存放节点步长xk:存放节点xiy1:存放数值解注:(1)语句Print["y(",xk+h//N,")=",y1//N]是将数值解用6位有效数字显示出来,如果要显示n位数有效数字,可以将语句改为Print["y(",xk+h//N,")=",N[y1,n]](2)Mathematica中有求微分方程初值问题数值解的命令,形式为:NDSolve[{y’[x]==f[x,y[x]5、],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.1y(0.2)=1.19182y(0.36、)=1.27744y(0.4)=1.35821y(0.5)=1.43513y(0.6)=1.50897y(0.7)=1.58034y(0.8)=1.64978y(0.9)=1.71778y(1.)=1.78477本题的准确解为y(x)=(1+2x)1/2,在一个坐标系中画出数值解与准确解的图形如下。图中点图是数值解,曲线为准确解。从图中可以知道数值解与准确解比较接近,但还是有误差的。由于Euler方法的计算精度不高,在实用中我们一般不使用此算法。改进的Euler方法算法1.输入函数f(x,y)、初值y0、自变量区间端点a,b步长h2.7、计算节点数n和节点xk3.用改进的Euler公式求数值解改进的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,i8、Input["步长h="]的步长输入应该用带小数点的数输入,这样可以加快计算速度,否则,由于Mathematica软件本身的原因,可能会出现计算时间过长等计算不出结果的情况。说明:本程序用改进的Euler公式求常微方程初
4、/N];y0=y1]程序中变量说明f[x,y]:存放函数f(x,y)y0:存放初值y0及数值解a:存放自变量区间左端点b:存放自变量区间右端点n:存放节点个数h:存放节点步长xk:存放节点xiy1:存放数值解注:(1)语句Print["y(",xk+h//N,")=",y1//N]是将数值解用6位有效数字显示出来,如果要显示n位数有效数字,可以将语句改为Print["y(",xk+h//N,")=",N[y1,n]](2)Mathematica中有求微分方程初值问题数值解的命令,形式为:NDSolve[{y’[x]==f[x,y[x]
5、],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.1y(0.2)=1.19182y(0.3
6、)=1.27744y(0.4)=1.35821y(0.5)=1.43513y(0.6)=1.50897y(0.7)=1.58034y(0.8)=1.64978y(0.9)=1.71778y(1.)=1.78477本题的准确解为y(x)=(1+2x)1/2,在一个坐标系中画出数值解与准确解的图形如下。图中点图是数值解,曲线为准确解。从图中可以知道数值解与准确解比较接近,但还是有误差的。由于Euler方法的计算精度不高,在实用中我们一般不使用此算法。改进的Euler方法算法1.输入函数f(x,y)、初值y0、自变量区间端点a,b步长h2.
7、计算节点数n和节点xk3.用改进的Euler公式求数值解改进的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,i8、Input["步长h="]的步长输入应该用带小数点的数输入,这样可以加快计算速度,否则,由于Mathematica软件本身的原因,可能会出现计算时间过长等计算不出结果的情况。说明:本程序用改进的Euler公式求常微方程初
8、Input["步长h="]的步长输入应该用带小数点的数输入,这样可以加快计算速度,否则,由于Mathematica软件本身的原因,可能会出现计算时间过长等计算不出结果的情况。说明:本程序用改进的Euler公式求常微方程初
此文档下载收益归作者所有