simple block for romberg method



you should use apply(f, ...)  or else the function f defined globally will be used instead of the f, the parameter to trap.
I'm not sure what your objective is here, to show that the built-in romberg function can be rewritten as a slower version
that is easier to read? 
There is also  built-in bigfloat version of romberg, and many other options for numerical quadrature...
 
RJf


----- Original Message -----
From: Luigi Marino <luigi_marino2 at alice.it>
Date: Saturday, April 3, 2010 9:53 am
Subject: simple block for  romberg method
To: maxima at math.utexas.edu


> 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
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima