Re: bug in Integrate (5.2) (Fullani's integral)
- To: mathgroup at smc.vnet.net
- Subject: [mg74947] Re: bug in Integrate (5.2) (Fullani's integral)
- From: "dimitris" <dimmechan at yahoo.com>
- Date: Thu, 12 Apr 2007 04:52:30 -0400 (EDT)
- References: <evhtn4$2sr$1@smc.vnet.net>
> By hand the integral can be obtained easily by integration by parts. I think I was fooling myself! Anyway... The integral in the current thread is an example of a Frullani integral. If f'[x] is continuous and the integral converges, we have Integrate[(f[a*x] - f[b*x])/x, {x, 0, Infinity}] = (f[0] - f[Infinity])*Log[b/a] In our case In[54]:= (Simplify[#1, a > 0 && b > 0] & )[Log[b/a]*(Limit[ArcTan[x/(a)] - ArcTan[x/b], x -> 0] - Limit[ArcTan[x/(-a)] - ArcTan[x/b], x -> Infinity])] Out[54]= Pi*Log[b/a] See also here http://www.artofproblemsolving.com/Forum/viewtopic.php?start&t=103776 Dimitris =CF/=C7 dimitris =DD=E3=F1=E1=F8=E5: > Consider the integral of the following function in [0,Infinity). > > In[710]:= > f[x_, a_, b_] := (ArcTan[x/a] - ArcTan[x/b])/x > > The integrand can be proved that converges for a, b>0. > > In[723]:= > f[x, a, b] + O[x]^4 > (Simplify[#1, a > 0 && b > 0] & )[f[x, a, b] + O[x, Infinity]^4] > > Out[723]= > SeriesData[x, 0, {a^(-1) - b^(-1), 0, -1/(3*a^3) + 1/(3*b^3)}, 0, 4, > 1] > Out[724]= > SeriesData[x, Infinity, {-a + b}, 2, 4, 1] > > However Mathematica returns > > In[725]:= > Block[{Message}, Integrate[f[x, a, b], {x, 0, Infinity}]] > > Out[725]= > Infinity > > result which came from a very bad performance of Mathematica's > Integrate algorithm. > > (The ommited message is Integrate::idiv, generated when Mathematica > considers an integral > divergent.) > > However it must be pointed out that giving specific values for a and b > Mathematica returns correct results. > > E.g. > > In[735]:= > lst = Table[{Random[Integer, {1, 10}], Random[Integer, {1, 10}]}, > {10}] > (Integrate[f[x, #1[[1]], #1[[2]]], {x, 0, Infinity}] & ) /@ lst > N[%] > (NIntegrate[f[x, #1[[1]], #1[[2]]], {x, 0, Infinity}] & ) /@ lst > > Out[735]= > {{6, 10}, {9, 10}, {7, 3}, {10, 8}, {3, 1}, {4, 2}, {7, 3}, {6, 5}, > {6, 2}, {4, 1}} > > Out[736]= > {(1/2)*Pi*Log[5/3], (1/2)*Pi*Log[10/9], (-(1/2))*Pi*Log[7/3], (- > (1/2))*Pi*Log[5/4], (-(1/2))*Pi*Log[3], (-(1/2))*Pi*Log[2], (- > (1/2))*Pi*Log[7/3], (-(1/2))*Pi*Log[6/5], (-(1/2))*Pi*Log[3], (- > Pi)*Log[2]} > > Out[737]= > {0.8024030134443301, 0.16549991098452982, -1.3309323667973947, > -0.35051307075232924, -1.7256961476116015, -1.088793045151801, > -1.3309323667973947, -0.286390031707471, -1.7256961476116015, > -2.177586090303602} > > Out[738]= > {0.802403013444152, 0.1654999109844223, -1.3309323667973953, > -0.35051307075216187, -1.7256961476116057, -1.088793045151836, > -1.3309323667973953, -0.28639003170546784, -1.72569614760899, > -2.1775860903036426} > > > Also, (and more importantly) specifying explicitly assumptions for a,b > give correct symbolic results. > > E.g. > > In[764]:= > Integrate[f[x, a, b], {x, 0, Infinity}, Assumptions -> a > 0 && b > 0] > Out[764]= > (1/2)*Pi*Log[b/a] > > In[766]:= > Block[{Message}, Integrate[f[x, a, b], {x, 0, Infinity}, Assumptions - > > a < 0 && b > 0]] > Out[766]= > Infinity > > Note that the option GenerateConditions does not modify above > mentioned buggy performance > of Integrate > > In[775]:= > Block[{Message}, (Integrate[f[x, a, b], {x, 0, Infinity}, > GenerateConditions -> #1] & ) /@ {Automatic(*default*), True(*does > more extensive searching*), False}] > Out[775]= > {Infinity, Infinity, Integrate[(ArcTan[x/a] - ArcTan[x/b])/x, {x, 0, > Infinity}, GenerateConditions -> False]} > > > If Mathematica uses (in the curent integral) the Newton Leibniz > formula for obtaining the definite integral from the indefinite one, > below may be is one explanation why it fails if we don't specify > ranges for the parameters a,b. > > In[795]:= > Integrate[f[x, a, b], x] > Limit[%, x -> Infinity] - Limit[%, x -> 0](*no specification*) > Limit[%%, x -> Infinity, Assumptions -> a > 0 && b > 0] - Limit[%%, x - > > 0, Assumptions -> a > 0 && b > 0](*specification*) > > Out[795]= > (1/2)*I*(PolyLog[2, -((I*x)/a)] - PolyLog[2, (I*x)/a]) - > (1/2)*I*(PolyLog[2, -((I*x)/b)] - PolyLog[2, (I*x)/b]) > Out[796]= > DirectedInfinity[I*Sign[Log[-(I/a)] - Log[I/a] - Log[-(I/b)] + Log[I/ > b]]] > Out[797]= > (1/2)*Pi*Log[b/a] > > > Another way to get the definite integral is > > In[804]:= > Integrate[f[x, Catalan, EulerGamma], {x, 0, Infinity}] /. {Catalan -> > a, EulerGamma -> b} > Out[804]= > (1/2)*Pi*Log[b/a] > > > By hand the integral can be obtained easily by integration by parts. > > > Dimitris