Re: Using NIntegrate[] within FindRoot[] ??
- To: mathgroup at smc.vnet.net
- Subject: [mg2324] Re: Using NIntegrate[] within FindRoot[] ??
- From: rknapp (Robert Knapp)
- Date: Tue, 24 Oct 1995 02:14:29 -0400
- Organization: Wolfram Research, Inc.
In article <DGvx8w.B2J at wri.com> a_kowald at chemie.fu-berlin.de (Axel Kowald) writes: > > I like to use NIntegrate with FindRoot as in the following trivial example: > > FindRoot[NIntegrate[r x,{x,0,3}] == 9, {r,1}] > > That means I want to find the value of "r" for which the integral is equal to 9. > However, I get the error message: > > Integrand 1.5 r is not numerical ... > > What am I doing wrong and how am I doing it right ??? > > > Many thanks in advance > > > Axel Kowald > > > P.S. I know that the example is more than trivial, I just used it for > illustrative purposes. I also know that I can write a function which > iterates several values for r, but if I could use FindRoot its definitely > the most elegant way. > When you use the command you wrote above, FindRoot is obtaining the correct result, actually you are doing it right. The error message comes from a symbolic evaluation of the objective function at the beginning of the computation. The symbolic evaluation is necessary to find the Jacobian for Newton's method. I see 2 simple solutions to your dilemma. 1) Ignore the message (Not always safe, but since you are getting no messages to the same effect from FindRoot it is likely that at some point the objective function is evaluating to a number. You could turn off the message if you wish not to see it. (Off[NIntegrate:: 2) Turn off the message. (roughly the same as 2) 3) Prevent symbolic evaluation of the NIntegrate. This is most easily done by something like nint[r_?NumberQ] := NIntegrate[r x,{x,0,3}] but remember, FindRoot will not be able to find the Jacobian, so you will have to give it two starting values so that it can use an approximate Jacobian (the secant method) as in FindRoot[nint[r] == 9, {r,1,1.1}] Rob Knapp WRI