Exercise "adaptive integration"
function open24(f,a,b){
h=b-a;
f1=f(a+h*1/6); f2=f(a+h*2/6); f3=f(a+h*4/6); f4=f(a+h*5/6);
i2=(f2+f3)/2*h;
i4=(2*f1+f2+f3+2*f4)/6*h;
i=i4; err=abs(i4-i2); return {i:i,err:err};}
function adapt(f,a,b,acc,eps){
y=open24(f,a,b); tol = acc+eps*abs(y.i);
if (y.err < tol) then return y;
else {
y1=adapt(f,a,(a+b)/2,acc/√[2],eps);
y2=adapt(f,(a+b)/2,b,acc/√[2],eps);
return {i:y1.i+y2.i, err:√[y1.err2 + y2.err2]}
}