Friday, September 24, 2010

Announcing mpmath 0.16

I'm happy to announce the release of mpmath 0.16, which contains the usual bugfixes as well as a slew of new features!

The main focus has been to improve coverage of special functions. Additions include inhomogeneous Bessel functions, Bessel function zeros, incomplete elliptic integrals, and parabolic cylinder functions. As of 0.16, mpmath implements essentially everything listed in the NIST Digital Library of Mathematical Functions chapters 1-20, as well as 21,24,27 and 33. (For 25 and 26 -- combinatorial and number-theoretic functions, see also my post about FLINT 2.)

Another major change is that mpmath 0.16 running in Sage will be much faster thanks to new extension code (currently awaiting review for inclusion in Sage). I've clocked speedups between 1.3x and 2x for various nontrivial pieces of code (such as the mpmath test suite and the torture test programs).

Thanks to William Stein, my work on mpmath during the summer was funded using resources from NSF grant DMS-0757627. This support is gratefully acknowledged.

Most of the new features are described in previous posts on this blog. For convenience, here is a short summary:

Assorted special functions update

  • The documentation now includes plots to illustrate several of the special functions.

  • Airy functions have been rewritten for improved speed and accuracy and to support evaluation of derivatives.

  • Functions airyaizero(), airybizero() for computation of Airy function zeros have been implemented.

  • Inhomogeneous Airy (Scorer) functions scorergi() and scorerhi() have been implemented.

  • Four inhomogeneous Bessel functions have been added (lommels1(), lommels2(), angerj(), webere()).

  • The Lambert W function has been rewritten to fix various bugs and numerical issues

Incomplete elliptic integrals complete

  • The Legendre and Carlson incomplete elliptic integrals for real and complex arguments have been implemented (ellipf(), ellipe(), ellippi(), elliprf(), elliprc(), elliprj(), elliprd(), elliprg()).

Sage Days 23, and Bessel function zeros

  • Functions besseljzero() and besselyzero() have been implemented for computing the m-th zero of Jν(z), J'ν(z) Yν(z), or Y'ν(z) for any positive integer index m and real order ν ≥ 0.

Post Sage Days 24 report

  • The Parabolic cylinder functions pcfd(), pcfu(), pcfv(), pcfw() have been implemented.

Euler-Maclaurin summation of hypergeometric series

  • Hypergeometric functions pFp-1(...; ...; z) now support accurate evaluation close to the singularity at z = 1.

  • A function sumap() has been added for summation of infinite series using the Abel-Plana formula.

  • Functions diffs_prod() and diffs_prod() have been added for generating high-order derivatives of products or exponentials of functions with known derivatives.

Again, mpmath in Sage is about to get faster

  • New Cython extension code has been written for Sage to speed up various operations in mpmath, including elementary functions and hypergeometric series.

There are various other changes as well, such as support for matrix slice indexing (contributed by Ioannis Tziakos -- thanks!). As usual, details are available in the changelog and the Changes page on the Google Code project site.