On Nov. 1, 2011, I wrote:
--------------------------
>debug printouts now show this question
>comes from rectform:
>
>(%i2) rectform(%i*bessel_i(0,%i*inf));
>Is 1 zero or nonzero?
>
>nonzero;
>(%o2) %i*bessel_i(0,%i*inf)
-------------------------------------
This doesn't happen if I use limit inside the
code, which replaces %i*inf by infinity.
-------------------------------------
(%i7) load(temp);
(%o7) "c:/work2/temp.mac"
(%i8) nint_integrate(bessel_i(1,%i*x),x,1,inf);
vx = %i*bessel_i(0,%i*x)
vxop = "*"
vxa = %i*bessel_i(0,%i)
vxa = 0.76519768655797*%i
vxb = %i*bessel_i(0,infinity)
vxb = %i*'realpart(bessel_i(0.0,infinity))
-1.0*'imagpart(bessel_i(0.0,infinity))
use defint instead
defint: integral is divergent.
#0: nint_integrate(ue=bessel_i(1,%i*x),uvar=x,ua=1,ub=inf)
-- an error. To debug this try: debugmode(true);
(%i9) ax : %i*bessel_i(0,%i*x)$
(%i10) axb : limit(ax,x,inf,minus);
(%o10) %i*bessel_i(0,infinity)
(%i11) float(axb);
(%o11) %i*bessel_i(0.0,infinity)
(%i12) rectform(%);
(%o12)
%i*'realpart(bessel_i(0.0,infinity))-'imagpart(bessel_i(0.0,infinity))
------------------------------------
using the limit form of the code, with debug printouts present:
----------------------------------------------------------------
nint_integrate (ue,uvar,ua, ub) :=
block ([vx,vxa,vxb,vxop ],
/* try to get indefinite integral first */
vx : apply ('integrate,[ue,uvar]),
display (vx),
vxop : op(vx),
display (vxop),
if vxop # integrate then (
if ua = minf then
vxa : limit (vx,uvar,minf,plus)
else vxa : subst(ua,uvar,vx),
display(vxa),
vxa : expand(float(rectform(vxa))),
display (vxa),
if complex_number_p (vxa) then (
if ub = inf then
vxb : limit (vx,uvar,inf,minus)
else
vxb : subst(ub,uvar,vx),
display (vxb),
vxb : expand(float(rectform(vxb))),
display (vxb),
if complex_number_p (vxb) then return (vxb - vxa))),
/* otherwise use defint */
print(" use defint instead "),
apply ('integrate,[ue,uvar,ua,ub]),
expand(float(rectform(%%))))$
---------------------------------------------
So problem solved.
Sorry for the noise.
Ted Woollett