
function un=RK2(x0,y0,xfin,f,N,gamma1,gamma2,alpha,beta)

%--------------------------------------------------------------------------
% Oggetto:
% Implementazione dei metodi RK2
%--------------------------------------------------------------------------
% Input:
% x0: punto iniziale
% y0: valore della soluzione nel punto iniziale
% xfin: punto finale
% f: funzione in due variabili, che descrive il problema di Cauchy:
%             * y'(x)=f(x,y(x)) x>=x0, x <= xfin
%             * y(x0)=y0
% N: numero di suddivisioni equisp. di [x0,xfin] 
% gamma1,gamma2,alpha,beta: parametri RK2
%--------------------------------------------------------------------------
% Output:
% un: approssimazione della soluzione del problema di Cauchy in "xn=x0+nh"
% con "n=0,...,N", dove "Nh=xfin-x0"
%--------------------------------------------------------------------------

x=linspace(x0,y0,N+1);
un=[y0];

h=(xfin-x0)/N;

for n=2:N+1
    f0=feval(f,x(n-1),u(n-1));
    f1=feval(f,x(n-1)+alpha*h,un(n-1)+beta*h*f0);
    Fn=gamma1*f0+gamma2*f1;
    un(n)=un(n-1)+h*Fn;
end
