Polylogarithms





Raymond Toy <toy.raymond <at> gmail.com> writes:

> On 4/21/12 4:02 PM, Ken Roberts wrote:
> > What would be involved in modifying Maxima to support
> > numerical calculation of
> > polylogarithm function li[s](z) for values of s besides s=2 and s=3?

>
> It would be fantastic to have a numerical evaluation of polylogs.  (I
> think the current version only gives single-float precision, all other
> functions in maxima.)
> 
> If you have a reference to the algorithm, that would help a lot.  That
> might allow maxima to do a bigfloat implementation.  If all there is is
> the C code you mentioned, that would be helpful too.
> 
> Ray
> 

Hi Ray,

Thanks for such a prompt reply!

The code I'm using for polylog is from Linas Vepstas, his package
called ANANT, which stands for "Algorithms in Analytic Number Theory".
You can see the code at https://launchpad.net/anant and it is GPL and
does arbitrary precision calcs.

The code implements an extension of the GNU multiprecision (GMP) C library,
with a complex data type (structure with two multiprecision floats),
and a variety of appropriate routines for complex arithmetic.
Then there are several special functions for complex argument,
implemented in multiprecision.

The polylog algorithms, and Linas' recommendations re choices based
on domain, are discussed in his paper:
Linas Vepstas, "An efficient algorithm for accelerating the convergence of
oscillatory series, useful for computing the polylogarithm and Hurwitz zeta
functions", Numerical Algorithms, 2008, vol 47, pp 211-252.

In general, complex polylog is the Borwein algorithm.  But there is an
argument transformation to get into the domain where that algorithm
will be convergent.

It is possible to use arguments which cause cpx_polylog to blow up;
there is a need, in a general usage implementation, to do some
argument screening, and to flip over to simpler algorithms in some
particular situations.  Linas has used his code for particular regions,
and I'm doing the same (different regions, in my case related to some
physical properties of materials calculations).  But a general exploration
of the entire complex domain C x C for Li(s,z) would likely be problematic.
Not to mention branch cut considerations.

However, for my physical calcs, everything is real at present
(the complex args are for fun, playing around with functional
relationships ideas, not explicitly related to materials properties
optimization).  It would be really nice if real args were possible
within Maxima!  It would mean everyone in our material group
could do his own calcs, instead of waiting for me to code in C,
and hope that I got it right.

If I can help further, please just ask.

Thanks!

Ken Roberts
krobe8 at gmail.com