% NOME: ... COGNOME: ... MATRICOLA: ...

function Inum=gregory(f,N,estremi)

% troubleshooting

if isempty(N)
    Inum=NaN; return;
end

if N <= 0
    Inum=return;
end



% approssimazione integrale
 
a=estremi(1); b=estremi(2);
h=(b-a)/(N-1);
x=linspace(a,b,N);
y=feval(f,x);

% prima parte
S=h*y;
S(1)=0.5*S(1);
S(end)=0.5*S(end);

% correzione
C1=(f(x(2))-f(x(1)))*h/12;
C2=(f(x(end))-f(x(end-1)))*h/12;

corr=C1-C2;

% risultato
Inum=sum(S)+corr;
