Re: bug in Integrate (5.2) (Fullani's integral)
- To: mathgroup at smc.vnet.net
- Subject: [mg74967] Re: bug in Integrate (5.2) (Fullani's integral)
- From: "dimitris" <dimmechan at yahoo.com>
- Date: Fri, 13 Apr 2007 02:00:16 -0400 (EDT)
- References: <evhtn4$2sr$1@smc.vnet.net><evksfg$pu1$1@smc.vnet.net>
Ooops! I mean Frullani integral. Not Fullani. In the title is the misprint; inside the message I typed correctly the name. Dimitris =CF/=C7 dimitris =DD=E3=F1=E1=F8=E5: > > 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