fredrikj.net / blog /

# Announcing mpmath 0.16

*September 24, 2010*

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.

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

Euler-Maclaurin summation of hypergeometric series

- Hypergeometric functions
_{p}*F*_{p-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.