常微分方程数值解法课程设计

常微分方程数值解法课程设计

ID:9225403

大小:494.00 KB

页数:17页

时间:2018-04-23

常微分方程数值解法课程设计_第1页
常微分方程数值解法课程设计_第2页
常微分方程数值解法课程设计_第3页
常微分方程数值解法课程设计_第4页
常微分方程数值解法课程设计_第5页
资源描述:

《常微分方程数值解法课程设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、课程设计报告课程设计题目:常微分方程数值解法学生姓名:专业:班级:指导教师:时间:题目:常微分方程数值解法用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题:一、摘要在matlab环境下熟悉的运用计算机编程语言并结合龙格-库塔法的理论基础对常微分方程初值问题进行求解,在运行完程序后以及对运行结果做出各方面的分析和比较。二、设计目的用熟悉的计算机语言编程上机完成用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题。二、理论基础1.欧拉公式【3】在点将作Taylor展开,得,那么当h充分小时,略去误差项,用近似替

2、代、近似替代,并注意到,便得上述方法称为Euler方法。2.改进Euler方法【3】在应用梯形方法的迭代公式进行运算时,每迭代一次都要重新计算函数的值,且还要判断何时可以终止或转下一步计算。为了控制计算量和简化算法,通常只迭代一次就转入下一步计算。具体说,我们先用Euler公式求得一个初步的近似值,称之为预测值,然后用梯形方法的迭代公式作一次迭代得,即将校正一次,这样建立的预测-校正方法称之为改进的Euler方法:预测:,校正:.3.三阶龙格-库塔方法【3】类似前面改进的Euler方法公式的推导方法,将在处作Taylor展开,然后再将在处作Taylor展开,只要将两个展开式

3、前四项相同便有。于是得到三阶龙格-库塔公式为:4.四阶龙格-库塔方法【3】类似前面三阶龙格-库塔的推导方法,如果每步计算四次函数f(x,y)的值,完全类似的,可以导出局部截断误差为的四阶龙格-库塔公式,其公式为:三、程序代码及运算结果用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题:1.求精确解首先可以求得其精确解为:y=exp(-cos(x))>>x=0:0.05:1;>>y=exp(-cos(x));>>plot(x,y,'b*-');>>Data=[x',y']Data=00.36790.05000.36830.10000.3697

4、0.15000.37200.20000.37530.25000.37950.30000.38470.35000.39090.40000.39810.45000.40640.50000.41580.55000.42630.60000.43810.65000.45110.70000.46540.75000.48110.80000.49820.85000.51690.90000.53710.95000.55901.00000.5826图1精确解2、用欧拉法求解程序如下:建立函数文件cwfa1.mfunction[x,y]=cwfa1(fun,x_span,y0,h)x=x_spa

5、n(1):h:x_span(2);y(1)=y0;forn=1:length(x)-1y(n+1)=y(n)+h*feval(fun,x(n),y(n));endx=x';y=y';在MATLAB输入以下程序:>>clearall>>fun=inline('y*sinx');>>[x,y]=cwfa1(fun,[0,1],exp(-1),0.05);>>[x,y]>>plot(x,y,'r+-')ans=00.36790.05000.36790.10000.36880.15000.37060.20000.37340.25000.37720.30000.38190.35000

6、.38760.40000.39440.45000.40230.50000.41130.55000.42160.60000.43320.65000.44620.70000.46070.75000.47680.80000.49470.85000.51450.90000.53640.95000.56051.00000.5871结果及其图象:图2欧拉解3、用改进欧拉法求解:程序如下:建立函数文件cwfa2.mfunction[x,y]=cwfa2(fun,x_span,y0,h)x=x_span(1):h:x_span(2);y(1)=y0;forn=1:length(x)-1k1

7、=feval(fun,x(n),y(n));y(n+1)=y(n)+h*k1;k2=feval(fun,x(n+1),y(n+1));y(n+1)=y(n)+h*(k1+k2)/2;endx=x';y=y';在MATLAB输入以下程序:>>clearall>>fun=inline('y*sinx');>>[x,y]=cwfa2(fun,[0,1],exp(-1),0.05);>>[x,y]>>plot(x,y,'r+-')ans=00.36790.05000.36830.10000.36970.15000.3720

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。