Re: Integrate vs NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg46882] Re: [mg46868] Integrate vs NIntegrate
- From: Anton Antonov <antonov at wolfram.com>
- Date: Fri, 12 Mar 2004 23:39:32 -0500 (EST)
- References: <200403120702.CAA25536@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Mukhtar Bekkali wrote: >I am confused why NIntegrate misbehaves on such a simple function as mine. > >Here is what I have: > >In: > >f=D[1/(1+(1+(a-b)^2)),a]; >g=Integrate[f*b*(1-b)^2,{b,0,1},Assumptions->0<a<1]; >FindRoot[g==0,{a,0,1}] > >Out: > >a->0.397207 > >However, since Integrate takes long, I tried to use NIntegrate instead and >this is what I get > >In: > >f=D[1/(1+(1+(a-b)^2)),a]; >g:=NIntegrate[f*b*(1-b)^2,{b,0,1}]; >FindRoot[g==0,{a,0,1}] > >Out: > >a->1 > >or, FindRoot+NIntegrate give me the upper boundary of a. If I abandon the >secant method and turn to Newton, i.e. use >FindRoot[g==0,{a,0.5}] instead then I get the message that Jacobian is >singular at a=0.5 and get no solution. Perturbing the starting value of a >does not help. > >What is going on here? > > Your NIntegrate input evaluates with the messages saying the computation has failed: In[1]:= f = D[1/(1 + (1 + (a - b)^2)), a]; In[2]:= g := NIntegrate[f*b*(1 - b)^2, {b, 0, 1}]; In[3]:= FindRoot[g == 0, {a, 0, 1}] 2 NIntegrate::inum: Integrand f b (1 - b) is not numerical at {b} = {0.5}. FindRoot::cvmit: Failed to converge to the requested accuracy or precision within 100 iterations. Out[3]= {a -> 1.} The Integrate and NIntegrate results coincide if we can rewrite the code above as In[4]:= Clear[f, g] In[5]:=f[(a_)?NumberQ] := Evaluate[D[1/(1 + (1 + (a - b)^2)), a]]; In[6]:=g[(a_)?NumberQ] := NIntegrate[f[a]*b*(1 - b)^2,{b, 0, 1}]; In[7]:=FindRoot[g[a] == 0, {a, 0, 1}] NIntegrate::ploss: Numerical integration stopping due to loss of precision. Achieved neither the requested PrecisionGoal nor AccuracyGoal; suspect one of the following: highly oscillatory integrand or the true value of the integral is 0. If your integrand is oscillatory try using the option Method->Oscillatory in NIntegrate. NIntegrate::ploss: Numerical integration stopping due to loss of precision. Achieved neither the requested PrecisionGoal nor AccuracyGoal; suspect one of the following: highly oscillatory integrand or the true value of the integral is 0. If your integrand is oscillatory try using the option Method->Oscillatory in NIntegrate. Out[7]= {a -> 0.397861} You can further refer to the technical documentation explaining the evaluation of the arguments by the numerical functions http://support.wolfram.com/mathematica/mathematics/numerics/nsumerror.html -- Anton Antonov Wolfram Research, Inc.
- References:
- Integrate vs NIntegrate
- From: "Mukhtar Bekkali" <mbekkali@hotmail.com>
- Integrate vs NIntegrate