function [tout, yout]  = euleroesplicito (odefun, tspan, y0)
%
% function [tout, yout]  = euleroesplicito (odefun, tspan, y0)
%
% Risolve l'equazione differenziale y'(t) = odefun (t, y(t)) con dato
% iniziale y0 tramite il metodo di Eulero esplicito.
% Approssima la soluzione nei punti di tspan.
m = length (tspan) - 1;
k = diff (tspan);
yout(1) = y0;
for n = 1:m
  yout(n + 1) = yout(n) + k(n) * odefun (tspan(n), yout (n));
end
tout = tspan;
%!demo
%! r = 2;
%! odefun = @(t, y) r * y * (1 - y);
%! tspan = linspace (0, 1, 51);
%! y0 = 2;
%! [tout, yout] = euleroesplicito (odefun, tspan, y0);
%! plot (tout, y0 * exp (r * tout) ./ (1 + y0 * (exp(r * tout) - 1)), ...
%!       tout, yout, '*')
%! title ('Equazione logistica')
%! xlabel ('t')
%! legend ('Soluzione analitica','Soluzione numerica')
%!test
%! r = 2;
%! odefun = @(t, y) r * y * (1 - y);
%! tspan = linspace (0, 1, 101);
%! y0 = 2;
%! [tout, yout] = euleroesplicito (odefun, tspan, y0);
%! assert (yout, ...
%!         y0 * exp (r * tout) ./ (1 + y0 * (exp(r * tout) - 1)), 0.01)
