您的位置:首页 > 其它

用显式欧拉格式和改进的欧拉格式求解常微分初值问题

2016-11-28 20:00 453 查看
一.实验内容



二.实验代码
1.欧拉格式
(1)先建立m文件,命名为fun.m ,输入代码如下:
    function z=fun(x,y);
     z=y-2*x./y;  
(2)在MATLAB中建立M文件Euler.m,输入代码如下:
     function ym=Euler(xn,yn,h)
     ym=yn+h*f(xn,yn);
(3) 在MATLAB中建立M文件useEuler.m,输入代码如下:

     function [x,y]=useEuler(x0,x1,y0,h)
     n=floor((x1-x0)/h+0.5);
     x=zeros(n+1,1);
     y=zeros(n+1,1);
     x(1)=x0;
     y(1)=y0;
     for i=2:n+1
          x(i,1)=x(i-1,1)+h;
          y(i,1)=Euler(x(i-1,1),y(i-1,1),h);
      End
(4)画图
x0=0;

x1=1;

y0=1;

h=0.1;

[x,y]=useEuler(x0,x1,y0,h);

plot(x,y);

    yy=sqrt(2*x+1);

    plot(x,yy,'b.');

2.改进的Euler格式

(1) 在MATLAB中建立M文件f.m,输入代码如下:

 function z=f(x,y)

      z=y-2*x./y;  
(2) 在MATLAB中建立M文件improveEuler.m,输入代码如下:

    function ym=improveEuler(xn,yn,ys,h)

      ym=yn+h.*(f(xn,yn)+f(xn+h,ys))./2;

(3)  i=1;

     xn=a;

     yn=b;

     ym=y(2);

     while i<n

        ys=improveEuler(xn,yn,ym,h);

         i=i+1;

         y2(i)=ys;

         xn=xn+h;

         yn=ys;

         ym=y(i+1);

      end

      ys=improveEuler(xn,yn,ym,h);

      y2(n+1)=ys;

(4)在MATLAB中建立M文件useimproveEuler.m,输入代码如下:

function [x,y,y2]=useimproveEuler(a,b,h,n)

  i=1;

  xn=a;

  yn=b;

  x=zeros(n+1,1);

  y=zeros(n+1,1);

  y2=zeros(n+1,1);

  x(1)=a;

  y(1)=b;

  y2(1)=b;

  while i<=n

      ym=Euler(xn,yn,h);

      i=i+1;

      xn=xn+h;

      x(i)=xn;

      yn=ym;

      y(i)=yn;  

  end

(4)画图

 a=0;

  b=1;

  h=0.1;

  n=10;

  [x,y2]=useimproveEuler(a,b,h,n);

  plot(x,y,'b.');

  hold on;

  plot(x,y2,'r-');

  yy=sqrt(2.*x+1);

  plot(x,yy,'g-');

三.实验结果
1. 欧拉格式

运行程序,得到如下图像:

 


 其中点表示欧拉格式迭代得到的数值解,绿线表示真实解。

2.改进的欧拉格式



其中红线表示改进的欧拉格式得到数值解,绿线表示真实解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: