Re: How to make results from Integrate and NIntegrate agree
- To: mathgroup at smc.vnet.net
- Subject: [mg66642] Re: [mg66610] How to make results from Integrate and NIntegrate agree
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Thu, 25 May 2006 02:58:21 -0400 (EDT)
- References: <200605240701.DAA08462@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 24 May 2006, at 16:01, riazzi at hotmail.com wrote: > Hello, > > I need to evaluate the integral of a discontinuous function for which > the results from Integrate and NIntegrate do not agree. A more > simple > function which demonstrates the problem I face is the following, which > is a simplified form (for nonnegative, real arguments) of the > FractionalPart function from functions.wolfram.com. I'm using this > form because Integrate returns my integral unevaluated when I use the > built in FractionalPart[]. > > In[1]= > FrPart[x_]:=(1/2)-ArcTan[Cot[Pi*x]]/Pi > > > So here's the example function to be integrated, showing it's > discontinuities at {1/n : n a Natural number}: > > In[2]= > Plot[FrPart[1/x], {x,1/6,1},PlotPoints->100]; > > > If I integrate this numerically, I get what appears to be the right > answer, and the plot looks like what I would expect to see: > > In[3]= > nintgrl[x_] := If[x = (1/6), 0, NIntegrate[FrPart[1/u], {u, (1/6), > x}, > MaxRecursion -> 30, WorkingPrecision -> 30, PrecisionGoal -> 25]] > Plot[nintgrl[x], {x, 1/6, 1}, PlotStyle -> {Red}]; > nintgrl[1] > > Out[3]= <<Plot omitted>> > 0.3417594692 > > If I evaluate the integral piecewise, I obtain an answer that agrees > with NIntegrate's: > > In[4]= > area = Sum[Integrate[1/u -n, {u,1/(n+1),1/n}],{n,1,5}] > N[area] > > Out[4]= -(29/20) + Log[6/5] + Log[5/4] + Log[4/3] + Log[3/2] + Log[2] > 0.341759 > > > If I evaluate the integral with Integrate, here is what I get: > > In[5]= > FullSimplify[Integrate[FrPart[1/x], x]] > > Out[5]= (x/2) - (x * ArcTan[Cot[Pi/x]])/Pi + Log[x] - 1 > > (NOTE: I am aware that having Integrate evaluate the definite integral > Integrate[FrPart[1/u], {u,1/6,1}] returns the correct answer in this > case. For my more complicated function over a different range it does > not.) > > > Here's how the Integrate result looks, with a constant of integration > of 5/6 + Log[6] added to make the plot start at zero like the > NIntegrate result: > > In[6]= > Plot[(x/2) - (x * ArcTan[Cot[Pi/x]])/Pi + Log[x] - 1 + 5/6 + Log[6], > {x, 1/6, 1}, PlotStyle -> Blue]; > > > Looking at limits as x approaches (1/n) from either direction, I see > that the magnitude of the jump at (1/n) equals (1/n). If I remove the > jumps (by subtracting off their contribution via the function adj[x]), > the NIntegrate and Integrate plots overlap perfectly: > > In[7]= > adj[x_] := Sum[(1/n)*UnitStep[x - 1/n], {n, 2, 5}]; > adjPlot = Plot[(x/2) - (x * ArcTan[Cot[Pi/x]])/Pi + Log[x] - 1 + 5/6 + > Log[6] - adj[x], {x, 1/6, 1}, PlotStyle -> Blue]; > > > But I don't want to subtract off the contribution of the jumps, nor do > I want to sum up a (for me infinite) collection of piecewise > terms. So > what I'm looking for is a way to make Integrate produce a closed-form > expression for my integrand that does not produce these > discontinuities, plus some insight as to why they appear. I'd guess > the latter has to do with branch cuts in the complex plane for the > functions involved, and where the solution might have to do with > picking a different contour or somesuch, but that's getting into areas > I've long forgotten or never learned. > > Thanks in advance, > Will R. > I suggest downloading from MathSource Maxim Rytin's excellent package "Piecewise". http://library.wolfram.com/infocenter/MathSource/5117/ It can deal correctly with FractionalPart as well as with your function FrPart: << Piecewise` Simplify[PiecewiseIntegrate[FractionalPart[1/x], {x, 1/6, 1}]] -(29/20) + Log[6] N[%] 0.341759 FrPart[x_] := 1/2 - ArcTan[Cot[Pi*x]]/Pi PiecewiseIntegrate[FrPart[1/x], {x, 1/6, 1}] -(29/20) + Log[6] The package also contains a numerical integrator NPiecewiseIntegrate: NPiecewiseIntegrate[FractionalPart[1/x], {x, 1/6, 1}] 0.3417594692280566 I am not sure if PiecewiseIntegrate can manage a general formula for PiecewiseIntegrate[FractionalPart[1/x], {x, a, b}] It seems to me a lot to ask and as it appears to be taking a long time, which I could not to spare today I just aborted. Andrzej Kozlowski Tokyo, Japan
- References:
- How to make results from Integrate and NIntegrate agree
- From: riazzi@hotmail.com
- How to make results from Integrate and NIntegrate agree