Propagates the state vector forward one time step using (Kutta's) Runge-Kutta third-order method.
y_next = RK3(f,t,y,h)
y_next = RK3(f,t,y,h) returns the state vector at the next sample time, y_next, given the current state vector y at time t, the function f(t,y) defining the ODE , and the step size h.
|Input||f||multivariate, vector-valued function () defining the ordinary differential equation
- inputs to f are the current time (t, 1×1 double) and the current state vector (y, p×1 double)
- output of f is the state vector derivative (dydt, p×1 double) at the current time/state
|t||current sample time||1×1
|y||state vector (i.e. solution) at the current sample time||p×1
|Output||y_next||state vector (i.e. solution) at the next sample time,||p×1
- This documentation is written specifically for the case of vector-valued ODEs. However, this function can also be used for matrix-valued ODEs of the form , where .
Consider the initial value problem
Find the solution until using RK3. Then, compare your result to the solution found by solve_ivp using Kutta's 3rd-order method.
First, let's define our ODE () and initial condition in MATLAB.
f = @(t,y) y; y2 = 3;
Let's define a time vector between and with a spacing of .
h = 0.01; t = (2:h:10)';
Solving for using RK3 and comparing the result to the result obtained using solve_ivp with Kutta's 3rd-order method,
% preallocate vector to store solution y = zeros(size(t)); % store initial condition y(1) = y2; % solving using "RK3" for i = 1:(length(t)-1) y(i+1) = RK3(f,t(i),y(i),h); end % solving using "solve_ivp" [t_ivp,y_ivp] = solve_ivp(f,[2,10],y2,h,'RK3'); % maximum absolute error between the two results max(abs(y_ivp-y))
ans = 1.533408067189157e-09
As expected, the two methods obtain identical results.