function lab07_pelda1_matlab2015
% sajat keszitesu, explicit Euler modszeren alapulo diffegyenlet-megoldo
% tesztelese
% 2015. 04. 17.

    format long;

    % a derivaltfuggveny definicioja (anonim fuggvenykent):
    F = @(t,y) 2*y;

    % a megoldas kiszamitasa:
    [t1, y1] = explicitEuler(F, [0 3], 1);

    % rajzoljuk ki
    figure;
    hold on;
    plot(t1, y1,'r-', 'LineWidth', 2);

    % beepitett megoldo hasznalataval is szamoljuk ki a megoldast:
    [t45, y45] = ode45(F, [0 3], 1);

    % rajzoljuk ki ezt is:
    plot(t45, y45, 'bo-', 'LineWidth', 2);
    % es az analitikus megoldast is:
    plot(t45, exp(2.*t45),'k--','LineWidth',2);
    xlim([0, 3]);
    
    legend('explicit Euler', 'ode45', 'analitikus', 'Location', 'NorthWest');
    xlabel('t', 'FontSize', 12, 'FontWeight', 'bold');
    ylabel('ertekek', 'FontSize', 12, 'FontWeight', 'bold');
    title('Differencialegyenlet megoldasa', 'FontSize', 14);

end



function [t_out, y_out] = explicitEuler(F, tspan, y0)
% Egyszeru differencialegyenelt-megoldo, explicit Euler 
% modszer alapjan.
% Csak szemleltetesi celu, ne hasznaljuk kesobb, mert 
% pontatlan.
% F: derivaltfuggveny
% tspan: idoskala (elso es utolso pontja)
% y0: kezdeti ertek

    
    % felosztas (adatpontok szama):
    felosztas = 200;
    % lepeskoz:
    h = (tspan(end)-tspan(1))/felosztas;
    
    % kimeneti vektorok
    t_out = zeros(felosztas+1, 1);
    y_out = zeros(felosztas+1, length(y0)); % az oszlopok szama azert 
    % igazodik a kezdetiertek elemszamahoz, hogy tobbdimenzios problema 
    % eseten is mukodjon a megoldonk
    
    t_out(1) = tspan(1);
    y_out(1) = y0;
    for ind=2:felosztas+1
        t_out(ind) = t_out(ind-1)+h;
        % a derivalt aktualis erteke:
        ydot = F(t_out(ind), y_out(ind-1));
        % a derivalt erteke alapjan az allapot aktualis erteke
        y_out(ind) = y_out(ind-1) + h*ydot;
    end
end


