在Matlab上绘制Euler方法

时间:2018-09-21 03:04:28

标签: matlab plot

我在matlab中编写了euler方法的代码,现在我必须绘制近似值和精确结果。问题是我不知道如何介绍分析解决方案并将其绘制出来。我做了这个,但是没用。

function [t,w] = euler (f,y0,a,b,h) %func=f(x,y)=dy/dx               
                                            %a and b the interval ends 
                                            %h=distance between partitions
                                             %y0= initial value
                s=input('Give an equation in x: ','s'); %the solution of the ODE
                n=(b-a)/h;
                t=zeros(1,n+1);
                w=zeros(1,n+1);
                t(1)=a;
                w(1)=y0;

              for i=1:n
                    w(i+1)=w(i)+h*f(t(i),w(i));
                    t(i+1)=a+h*i;

              end
          w
          x=a:h:b;  
          y=s;              
          plot(x,y,'k')
          hold on             
          plot(t,w,'r')      
           hold off

endfunction

解析解为y = -x-1 + 2 * exp(x),ODE为y'= x + y。

1 个答案:

答案 0 :(得分:0)

显式的euler方法并非无条件稳定,因此请确保选择足够小的时间步进行测试。我几乎没有更改您代码中的任何内容,但是我需要使它更具可读性。如果问题仍然存在,请上传剧情的屏幕截图。

function [x,y] = euler(y0,a,b,h)        

      % Left out f for algorithm test!            
      % a and b the interval ends
      % h=distance between partitions ~ 
      % y0= initial value

      s=@(x) 2*exp(x) - (x+1);
      f=@(x,y) x + y;
      %s=input('Give an equation in x: ','s'); %the solution of the ODE
      x = a:h:b;
      n=length(x);
      y=zeros(n,1);
      y(1)=y0;

      for i=1:n-1
          y(i+1)=y(i)+h*f(x(i),y(i));
      end

      plot(x,s(x),'k')
      hold on             
      plot(x,y,'r')      
      hold off
endfunction

我建议您坚持使用尽可能少的变量。尽量不要将时域和时域混在一起,函数常常依赖于两者,然后将y(x)与时间步长混为一谈。

Img_Plot

现在应该可以解决了。请注意,y0必须在给定的a值上匹配解决方案函数的一点。

  

s(a)= y0

干杯

巴勃罗