UtamaDonny

ode_RK

Dec 9th, 2019
129
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function [t,y] = ode_RK4(f,tspan,y0,N,varargin)
  2. %Runge-Kutta method to solve vector differential eqn y’(t) = f(t,y(t))
  3. % for tspan = [t0,tf] and with the initial value y0 and N time steps
  4.  
  5. if nargin < 4 | N <= 0, N = 100; end
  6. if nargin < 3, y0 = 0; end
  7. y(1,:) = y0(:)'; %make it a row vector
  8. h = (tspan(2) - tspan(1))/N; t = tspan(1)+[0:N]'*h;
  9. for k = 1:N
  10. f1 = h*feval(f,t(k),y(k,:),varargin{:}); f1 = f1(:)'; %(6.3.2a)
  11. f2 = h*feval(f,t(k) + h/2,y(k,:) + f1/2,varargin{:}); f2 = f2(:)';%(6.3.2b)
  12. f3 = h*feval(f,t(k) + h/2,y(k,:) + f2/2,varargin{:}); f3 = f3(:)';%(6.3.2c)
  13. f4 = h*feval(f,t(k) + h,y(k,:) + f3,varargin{:}); f4 = f4(:)'; %(6.3.2d)
  14. y(k + 1,:) = y(k,:) + (f1 + 2*(f2 + f3) + f4)/6; %Eq.(6.3.1)
  15.  
  16. end
  17. end
RAW Paste Data