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