cino hilliard on Wed, 02 Sep 2009 16:14:24 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
RE: Euler-Maclaurin sumation function |
> Date: Wed, 2 Sep 2009 11:50:58 +0200 > From: Bill.Allombert@math.u-bordeaux1.fr > To: pari-users@list.cr.yp.to > Subject: Re: Euler-Maclaurin sumation function > > On Sat, Aug 01, 2009 at 11:34:01PM -0500, cino hilliard wrote: > > > > Hi, > > > > I understand the Euler-Maclaurin sumation formula is used in the Pari > > zeta() function. I checked the code but do not quite understand it. > > > > > > > > Can someone build a Pari script that will do this. Mathematica has a > > function Nsum that does this but I can't afford even the $295 price > > for the home edition. > > ... a Pari script that will do what ? Just as noted above an Nsum function as in Mathematica or an eulermac function as in Maple to approximate the sums of functions. Actually, I would prefer a built-in function eulermac(x=a,b,f(x)) which would be the Euler-Maclaurin sumation formula as is also noted above to quickly approximate the sum of functions like (x-1)/log(x), x=2,n. The sum() function in Pari is too slow for large n. A poster in the primenumbers group was kind enough to write the script template below which I modified slightly to get more output. I am able to modify the script to do various functions. However, I was unable to generalize it into a crisp eulermac() function as in Mathematica and Maple. As previously noted, a built-in, optimized function would be preferred. Yes, it is quite a challenge but it would greatly enhance the functionality of Pari. Cheers and Roebuck, Cino Hilliard ******************************Code************************************** \\ f(x,lx) = x/lx - 1/lx + a/lx^2 - b/lx^3; \\ modify at will f(x,lx) = (x-1)/lx; a=1; b=1; m=2; \\ chosen values \p60; terms=12;trunc=10^2;g=f(x,lx);d=[]; bv=bernvec(terms+1); { for(n=1,2*terms-1, \\ store odd derivatives g=deriv(g,x)+1/x*deriv(g,lx);if(n%2,d=concat(d,g))); } \\ fx(x)=f(x,log(x)); fx(x)=f(x,log(x)); \\ dx(y)=subst(subst(d,x,y),lx,log(y)); dx(y)=subst(subst(d,x,y),lx,log(y)); emac(m,n) = { local(dm,dn); dm=dx(m);dn=dx(n);intnum(x=m,n,fx(x))+(fx(n)+fx(m))/2 +sum(k=1,terms,bv[k+1]/((2*k)!)*(dn[k]-dm[k])); } \\ s=sum(k=2,trunc-1,fx(k)); s=sum(k=2,trunc-1,fx(k)); sm(m,n) = \\ as requested { if(n>trunc&&trunc>m&&m>1,s-sum(k=2,m-1,fx(k))+emac(trunc,n)); } for(k=1,40,print([k,sm(m,sqrtint(10^k))])) \\ for(k=1,20,print([k,sm(m, 10^k)])) |