function [tnew, xnew, fnew] = RKstep(fname, t, x, fx, h, G, ro, beta)
% Calcola un passo di un metodo di Runge-Kutta
% Input:
% fname: nome della funzione f(x,y)
% x: approssimazione della soluzione y'=f(x,y) nel punto t
% fx = f(t,x)
% h: passo di discretizzazione
% G, ro,beta: array che definiscono il metodo di RK
%
% Output:
% tnew = t + h
% xnew: approssimazione di x(t) in tnew
% fnew = f(tnew, xnew)

m = length(beta); % numero di stadi
n=size(fx,1);
k=zeros(m,n);

k(1,:)=fx';

for j=2:m
    tt = t + ro(j)* h;
    xx = x + h* G(j, 1:j-1)*k(1:j-1,:);
    k(j,:)= transpose(feval (fname, tt, xx));
end

tnew = t+h;
xnew= x + h * beta *k;
fnew = feval(fname, tnew, xnew);

