At that value, the subscript is no longer an integer. This is most likely a problem with floating-point calculation error. Using the fix (link) function to force the subscript to be an integer corrects it:
res(fix((i-low)/(step)+1)) = integral(integrand, low, i+step);
That leaves the problem of ‘x’ and ‘res’ not being the same lengths in:
res = fun_integra(prova, 0, 1, 0.1);
fixed by :
plot(x(1:numel(res)), res(1:end))