Re: FindRoot and parameters in NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg124529] Re: FindRoot and parameters in NIntegrate
- From: A Retey <awnl at gmx-topmail.de>
- Date: Sun, 22 Jan 2012 07:29:10 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jfe3jq$a16$1@smc.vnet.net>
Hi, > I am using Mathematica 8 to solve for parameters in an integral and an auxiliary equation. A prototypical problem is > > FindRoot[{1 + a + b , NIntegrate[a + b x, {x, 0, 1}]}, {{a, 0}, {b, 0}}] > > Mathematica reports the correct answer for the parameters a and b: > > {a -> 1., b -> -2.} > > But it also reports two error messages: > > NIntegrate::inumr: The integrand a+b x has evaluated to non-numerical values for all sampling points in the region with boundaries {{0,1}}.>> > > NIntegrate::izero: Integral and error estimates are 0 on all integration subregions. Try increasing the value of the MinRecursion option. If value of integral may be 0, specify a finite value for the AccuracyGoal option.>> > > I would appreciate any advice or comments on this problem or the error messages. > exactly speaking these are rather to be understood as warnings than errors, but Mathematica doesn't make a formal distinction between these. Here is what you need to do: FindRoot[{1 + a + b, NIntegrate[a + b x, {x, 0, 1}, AccuracyGoal -> 8]}, {{a, 0}, {b, 0}}, Evaluated -> False ] Usually FindRoot will evaluate it's argument with symbolic parameters (a,b) so that it can see what it's actually working on which in general is a good idea and allows additional optimizations. In cases like here, where the evaluation will cause problems for nonnumerical values of the parameters, you can avoid that by setting the Evaluate option to False. Note that: NIntegrate[a + b x, {x, 0, 1}] will not evaluate but return exactly the input, so the evaluation will not do any harm despite of the warning message. To avoid the other warning message you need just to do what it says: obviously FindRoot tries a parameter set that makes the integral zero (presumably it just tries a=0 and b=0). That makes the integrand zero and that's something that NIntegrate doesn't like and it is friendly enough to tell you. So do what the warning tells you and everything is fine. Be aware that there might be other warnings arising from NIntegrate for different problems, but numeric integration is a nontrivial tasks with many pitfalls like singularities, oscillating functions and alike. When using NIntegrate within FindRoot it the probability that you accidentally hit one of these corner cases is nonzero even for simple cases like this one. hth, albert