% Resavamo jednostavan Kosijev problem x''+x=0, x(0)=0, x'(0)=1, cije je jedinsteno
% resenje funkcija x(t)=sin(t). Resavamo tako sto prvo prebacimo u sistem:
% X' = [x1', x2'] = [x2, -x1], X(0) = [0, 1]. Kodiramo RK4.
clf

mode = 1; % 0 za crtanje grafika funkcije, 1 za crtanje fazne trajektorije

upper = 10;
t0 = 0; x0 = [0 1]';
h = 0.1; 
t = t0; 
x_osa = x0; % ovo je lista vektora vrednosti X(t) = [x1(t), x2(t)] = [x(t), x'(t)] koji trazimo
y1 = x0(1, 1);
y2 = x0(2, 1);
t_osa = t0:h:upper;
T = length(t_osa);

while (length(x_osa) < T) % RK4 metoda
    k1 = h * [y2 -y1]';
    k2 = h * ([y2 -y1]' + k1/2);
    k3 = h * ([y2 -y1]' + k2/2);
    k4 = h * ([y2 -y1]' + k3);
    
    k = [y1 y2]' + (k1 + 2*k2 + 2*k3 + k4)/6;
    y1 = k(1, 1);
    y2 = k(2, 1);
    x_osa = [x_osa [y1 y2]'];
    t = t + h;
end

x_osaA = sin(t_osa); % analiticko resenje

switch mode
    
    case 0

        plot(t_osa, x_osa(1, :)); hold on % plotujemo samo prvu vrstu, jer je x1(t)=x(t) nasa trazena funkcija
        plot(t_osa, x_osaA); hold on
        legend('RK4', 'Analiticko', 'Location', 'northwest');

    case 1
        
        plot(x_osa(1, :), x_osa(2, :)); hold on
        plot(sin(t_osa), cos(t_osa)); hold on % analiticko resenje za fazni portret. Dobija se kruznica parametrizovana sa (sin(t), cos(t))
        legend('RK4', 'Analiticko', 'Location', 'northwest');

end

