       NIntegrate-FindRoot acting up in version 5.1

• To: mathgroup at smc.vnet.net
• Subject: [mg56943] NIntegrate-FindRoot acting up in version 5.1
• From: "John Roberts" <jlr-d at jlr-d.cnc.net>
• Date: Wed, 11 May 2005 05:23:58 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

``` I originally made the input shown below in Mathematica 4.1.1. Version
4.1.1 ran it flawlessly and always produced the correct result from
NIntegrate with no warnings or error messages. Now, when I run the same
notebook with version 5.1.0 it crashes and gives the "FindRoot: :nlnum"
message shown below:

In1:   len = Sqrt[ (z^2 + (x Cos[ang] + r Sin[b] )^2  + (-r Cos[b] - x
Sin[ang])^2 ] ;

In2:  speed = NIntegrate[ (eqn = FindRoot[ len == c b r / v, {b,
0}, WorkingPrecision->100,
AccuracyGoal->80 ] ; beta = b  /.  eqn;  fnax) , {ang,  0,
3Pi/2,  2Pi},  WorkingPrecision->80,  AccuracyGoal->9 ]

Out2: FindRoot: :nlnum : The function value {0. + Sqrt[0.0172266 + (0. +
0.05 <<1>>)^2 + (-0.125 - 0.05 Sin[<<1>>])^2]
is not a list of numbers with dimensions {1} at {b} = {0.}.

As can be seen from the input shown above, NIntegrate integrates the
expression fnax with respect to the angle ang. But fnax is also a
function of the initial angle beta or b (beta = b), so each time
NIntegrate calculates the value of fnax it must first use FindRoot to
find the value of beta that corresponds to the value of ang that it is
using. I did not include the expression for fnax here because it is
rather large, but there is nothing exotic about fnax, it is just a lot
of terms with Sin and Cos functions.

All of the values z, x, r, c v are input with 120 decimal places of
precision or with infinite precision (no decimal point).

It should also be noted that I checked the FindRoot part alone (without
NIntegrate) at various points along the range of integration from ang
= 0 to ang = 2 Pi, and FindRoot got the correct value of beta at
every point with no warnings or error messages; so the problem appears
to be associated with how NIntegrate uses FindRoot in Mathematica 5.1
rather than with FindRoot itself.