function [X] = RK4 (a, t0, T, N, f)
    h = T / N;
    p = size(a, 1);
    X = zeros(p, N);
    
    t = t0;
    X(:, 1) = a;
    k = h/6;
    l = h/2;
    
    for i=2:N
        K0 = f(t, X(:, i-1));
        K1 = f(t + l, X(:, i-1) + l * K0);
        K2 = f(t + l, X(:, i-1) + l * K1);
        K3 = f(t + h, X(:, i-1) + h * K2);
        X(:, i) = X(:, i-1) + k * ( K0 + 2 * K1 + 2 * K2 + K3 )
        t = t + h;
    end
    
endfunction