欧拉格式改进欧拉格式后退欧拉格式.docVIP

  • 40
  • 0
  • 约4.67千字
  • 约 6页
  • 2017-08-18 发布于重庆
  • 举报

欧拉格式改进欧拉格式后退欧拉格式.doc

欧拉格式改进欧拉格式后退欧拉格式

微分方程数值解实验报告 实验序号:1 日期:2013年10月15日 班级 10应数A班 姓名 黄达 学号 201005050148 实验名称 Euler格式 实验所用软件及版本 Maltab2008 1、实验目的 进一步理解Euler格式、后退的Euler格式、改进的Euler格式的设计思路和算法流程,培养动手实践能力和分析能力。 2、实验内容 编写Euler格式、后退的Euler格式、改进的Euler格式的程序代码,用于计算下列常微分方程,将计算结果列于表1,并绘制三者的误差图,给出相应的结论。 准确解,步长取。 表1. Euler格式的数值结果(保留5位有效数字) Euler格式 后退Euler 格式 改进的Euler格式 准确解 0.1 1.1000 1.0909 1.0959 1.0954 0.2 1.1918 1.1743 1.1841 1.1832 0.3 1.2774 1.2517 1.2662 1.2649 0.4 1.3582 1.3237 1.3434 1.3416 0.5 1.4351 1.3910 1.4164 1.4142 0.6 1.5090 1.4540 1.4860 1.4832 0.7 1.5803 1.5128 1.5525 1.5492 0.8 1.6498 1.5676 1.6165 1.6125 0.9 1.7178 1.6183 1.6782 1.6733 1.0 1.7848 1.6647 1.7379 1.7321 3、详细设计 (1)、Euler格式 欧拉格式的matlab实现程序(euler.m)如下: function [x,y]=euler(fun,x0,xfinal,y0,n) if nargin5,n=10; 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 编写一个doty.m文件,如下: function f=doty(x,y) f=y-2*x/y; 在matlab命令窗口输入: [x,y]=euler(doty,0,1,1,10); y1=sqrt(1+2.*x); %对应的准确解 disp( x y y1) disp([x,y,y1]) (2)、后退的Euler格式 后退的Euler格式的matlab实现程序(backeuler.m)如下: function [x,y]=backeuler(fun,x0,xfinal,y0,n) if nargin5,n=10; end h=(xfinal-x0)/n; x(1)=x0;y(1)=y0; for i=1:n x(i+1)=x(i)+h; z0=y(i)+h*feval(fun,x(i),y(i)); for k=1:3 z1=y(i)+h*feval(fun,x(i+1),z0); if abs(z1-z0)1e-3 break; end z0=z1; end y(i+1)=z1; end 编写一个doty.m文件,如下: function f=doty(x,y) f=y-2*x/y; 在matlab命令窗口输入: [x,y]=backeuler(doty,0,1,1,10); y1=sqrt(1+2.*x); %对应的准确解 disp( x y y1) disp([x,y,y1]) (3)、改进的Euler格式 改进的Euler格式的matlab实现程序(neweuler.m)如下: function [x,y]=neweuler(fun,x0,xfinal,y0,n) if nargin5,n=10; end h=(xfinal-x0)/n; x(1)=x0;y(1)=y0; for i=1:n x(i+1)=x(i)+h; z0=y(i)+h*feval(fun,x(i),y(i)); y(i+1)=y(i)+h/2*(feval(fun,x(i),y(i))+feval(fun,x(i+1),z0)); end 编写一个doty.m文件,如下: function f=doty(x,y) f=y-2*x/y; 在matlab命令窗口输入: [x,y]=neweuler(doty,0,1,1,10); y1=sqrt(1+2.*x); %对应的准确解 disp(

文档评论(0)

1亿VIP精品文档

相关文档