% script pentru testarea metodelor de integrare a ecuatiilor diferentiale
% Se ruleaza dupa implementarea functiilor lipsa. Se ruleaza simplu fara nici
% un fel de argument. Ecuatia diferentiala se fixeaza prin modificarea
% lui "fhandle" (a se vedea mai jos). In cazul metodei Euler implicita,
% e nevoie de rezolvarea numerica a unei ecuatii neliniare, astfel incat
% metoda lui Newton devine un bun candidat. Din acest motiv e nevoie de
% functia "fpartialy" (a se vedea mai jos).
%
% !!! Student:
% !!! Implementati metoda lui Euler implicita astfel incat functia sa aiba antetul:
%
% !!! function yall = implicit_euler_newton_sol(y0,h,fhandle,fpartialy,N);
%
% unde yall este un vector ce contine toate valorile yn (sol numerica), n =0,1,...,N. 
%
% CTI 2021



% selecteaza metoda
meth_de = 1;
sol_exact = 1;

% ... definiti y0 (modifica)
y0 = 1;


% ... definiti f(t,y)  partial f/partial y (modifica)
fhandle     = @rhs_de_1;
%fpartialy   = @dyrhs_de_1;
%fhandle   = @lambda_test_fun;
%fpartialy = @dylambda_test_fun;

% !!! gasiti solutia ecuatiei diferentiale data de
% !!!  rhs_de_1 si y0. Implementati aceasta solutie
% !!!  in functia sol_de_1
if sol_exact
    solhandle = @sol_de_1;
end;

% ... definiti h-pasul de integrare (modifica)
h = 0.05;

% ... definiti N, timpul final de integrare T= N*h
N = 100;


% ... call la functia de rezolvarea a ecuatiei diferentiale (modifica)
if meth_de == 1
    yall = explicit_euler_sol(y0,h,fhandle,N);
else
    yall = implicit_euler_newton_sol(y0,h,fhandle,fpartialy,N);
end;

% ... constanta folosita pentru plot (modifica)
plotOn = 1;


if plotOn
    figure;
    plot([0:h:N*h],yall(1,:));
end;

if plotOn && sol_exact
    figure;
    yexact      = feval(solhandle,[0:h:N*h]);
    error_all   = abs(yall(1,:)-yexact(1,:));
    plot([0:h:N*h],error_all);
end;
