Re: Numerical Integration
- To: mathgroup at smc.vnet.net
- Subject: [mg71505] Re: Numerical Integration
- From: Peter Pein <petsie at dordos.net>
- Date: Tue, 21 Nov 2006 07:05:03 -0500 (EST)
- Organization: 1&1 Internet AG
- References: <ejrn8h$9a4$1@smc.vnet.net> <ejs36f$906$1@smc.vnet.net>
Peter Pein schrieb: > dimitris schrieb: >> Dear All, >> >> I have one question about the numerical integration of one function. >> >> $VersionNumber >> 5.2 >> > .... >> h[x_] := Tan[BesselJ[0, x]] >> >> Plot[h[x], {x, 0, 40}, PlotPoints -> 100, Axes -> None, Frame -> {True, >> True, False, False}, PlotStyle -> AbsoluteThickness[2]] >> >> Limit[h[x], x -> Infinity] >> 0 >> >> I try hard to find any proper settings for getting a numerical >> estimation of its integral >> over {0,Infinity} but I can't succeed. >> >> Any help will be greatly appreciate. >> >> Dimitris >> > > Hi Dimitris, > > I tried it this way: > > In[1]:= > Needs["NumericalMath`BesselZeros`"]; > h[x_] := Tan[BesselJ[0, x]]; > t0 = SessionTime[]; > bzlist = NestList[BesselJZerosInterval[0, {1, 2}*Last[#1] + {-1/10, 1/10}] & , > Flatten[{0, BesselJZeros[0, 2]}], 9]; > v0 = (NIntegrate[h[x], Evaluate[Flatten[{x, #1}]]] & ) /@ bzlist; > SequenceLimit[Rest[FoldList[Plus, 0, v0]]] > (SessionTime[] - t0)*seconds > Out[6]= > 1.4545133229307878 > Out[7]= > 1.75*seconds > > The displayed result (1.45451) does not change any more when increasing the > number of intervals from 9 to 10 or more. > > Peter > Hi, I revisited this problem; there's no need for BesselJZeros, because the distance of consecutive zeros approaches Pi for large x: Pi+Subtract@@BesselJZeros[0,{1000,1001}] --> 3.976868967470182*^-8 So I got this "oneliner": In[1]:= tanbessint[iter_Integer, prec_:16] := NumberForm[ SequenceLimit[ Rest[FoldList[Plus, 0, (NIntegrate[Tan[BesselJ[0, x]], Evaluate[Flatten[{x, #1}]], MaxRecursion -> 1000, WorkingPrecision -> (6*prec)/5, PrecisionGoal -> prec] & ) /@ Partition[Pi*Range[0, iter], 2, 1]]]], {prec + 3, prec}] In[2]:= (Timing[tanbessint[#1, 32]] & ) /@ (2^Range[2, 7]) Out[2]= (* NumberForm removed *) {{0.454*Second, 1.4649554394371646816`2.1072099696478666}, {1.734*Second, 1.4545166609457239891`5.41853992195166}, {5.094*Second, 1.4545130030326380662306103487`13.546349804879155}, {6.859*Second, 1.45451300303261076382833017427860887836`24.082399653118497}, {9.672*Second, 1.45451300303261076382832940251018898863`25.28651963577442}, {14.969*Second, 1.45451300303261076382832936767875149309`26.490639618430347}} Well, the demanded precision of 32 digits has not been reached but more than 25 digits should be sufficient for most purposes. Peter