simple block for romberg method



There is a simple block
for romberg method:

trap(n,a,b,f):=block(
h:(b-a)/n,
s:0,
for i:1 thru n-1 step 1 do
(s:s+f(a+i*h)),
AV:(h/2)*(f(a)+2*s+f(b)),
return (float(AV)))$

romb(max_iter,a,b,f):=block(
integ[1,1]:trap(1,a,b,f),
  for i:1 thru max_iter do
    (n:2^i,
    integ[i+1,1]:trap(n,a,b,f),
      for j:2 thru i+1 do
        (k:2+i-j,
        integ[k,j]:(4^(j-1)*integ[k+1,j-1]-integ[k,j-1])/(4^(j-1)-1))),
  integ_value:integ[1,max_iter],
return(integ_value))$

Example:

f(x):=cos(x);

romb(10,0,10,f);
-0.54402111088937

f(x):=sqrt(1+x^3);

romb(12,-1,1,f);
1.952753609576008

Best wishes
Luigi Marino