Сюжет о методе Эйлера на Matlab - PullRequest
       1

Сюжет о методе Эйлера на Matlab

0 голосов
/ 21 сентября 2018

Я сделал код для метода Эйлера в Matlab, и теперь я должен построить аппроксимацию и точный результат.Проблема в том, что я не знаю, как представить аналитическое решение и построить его.Я сделал это, но это не работает.

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 голосов
/ 21 сентября 2018

явный метод Эйлера не является безусловно стабильным, поэтому убедитесь, что вы выбрали достаточно малые временные шаги для своих тестов.Я почти ничего не изменил в вашем коде, но мне нужно было сделать его немного читабельным.Если проблема не исчезнет, ​​загрузите снимок экрана с графиком.

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

Я бы порекомендовал вам придерживаться как можно меньшего количества переменных.Старайтесь не смешивать временную и пространственную области, часто функции зависят от обоих, и тогда путать ay (x) с временными шагами непонятно.

Img_Plot

Должно работатьсейчасОбратите внимание, что y0 должен соответствовать точке вашей функции решения по заданному значению для a.

s (a) = y0

Cheers,

Pablo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...