Frequently Asked Questions


1. Software

1.1. Generalities

1.1.1. How do I report bugs or request new features?

Just drop a mail to Luc (luc(at)spaceroots(dot)org)!

1.1.2. Can I use the software on this site as I want?

Yes. This software is distributed in the hope it will be useful, under a BSD-like license. This mean you can do almost what you want, including embedding it in your own closed-source product if you want.

1.1.3. Is this code well tested?

I hope so. Of course, I cannot guarantee anything, but I try to set up tests as early as possible during development. Every time a bug is discovered, a corresponding test is added to the suite. The tests are distributed with the source and can be run using Junit.

The ode package has been tested by several people, only very few errors have been reported, they have all been corrected immediately

1.1.4. Is the full package currently being maintained?

Yes for bug fixes, no for new features. New versions are distributed as I (or contributors) fix bugs. I often reply quickly to questions. If you want a bug to be fixed, do not hesitate to ask.

I do not intend however to further develop the packages that are provided here. Most of the work I do now is done under the Apache Software Fundation umbrella and not here anymore. Please see answer to next question for details.

1.2. Mantissa versus Commons-math

1.2.1. How do you see the relation between Apache Commons-Math and Mantissa software?

As Mantissa was mainly a single-developer project, it had a single point of failure risk. Back in 2006, I joined the Apache Commons-Math project to reduce this risk by joining a larger developers community. At first, I expected to merge all of Mantissa into Apache Commons-Math. However, among all developers we reached a consensus that not everything in Mantissa was relevant for Apache Commons-Math and we started to import features one by one.

The merging has been completed now, and Apache Commons Math is considered to completely supersede Mantissa. Everything that could be imported is now available in Apache Commons Math and has already been improved a lot.

Mantissa is now considered an retired library. Users should switch to Apache Commons-Math. If they miss some very specific features from Mantissa that were not introduced, they can file a request for enhancement report in the Apache Commons Math bug tracking system.

1.2.2. Do you intend to continue to develop the Mantissa and Commons-Math software in parallel?

No, Mantissa is a retired library now.

1.2.3. As a general user of mathematical software would I be better off using the Apache Commons-Math or the Mantissa library?

You should definitely use Apache Commons-Math. It is actively maintained whereas Mantissa is lagging far behind by now and will not evolve anymore.

2. Maths

2.1. What are the arguments scalAbsoluteTolerance and scalRelativeTolerance in the Mantissa ODE package? What should I use these for, and what are typical values?


These arguments represent the tolerance for the error control. For each component of the state vector y[i] at the beginning of the step and y1[i] at the end of the step, a scaling factor is computed as

scale[i] = scalAbsoluteTolerance + scalRelativeTolerance * max(y[i], y1[i])

The error estimation is the RMS of (y1[i] - y1Diag[i])/scale[i], where y1 is the state vector at the end of the step and y1diag is the previous estimation from the Aitken-Neville interpolation.

This means that the algorithm will roughly keep the local error of y[i] below scalAbsoluteTolerance + scalRelativeTolerance * |y[i]|

If you need different accuracy on different components, you can use vectorial tolerances instead of scalar ones.

Typical values depend on your problem, of course but as a rule of thumb I would suggest something like scalRelativeTolerance = 10-9 and scalAbsoluteTolerance = 10-9 times the expected domain for the components of the state vector (hence having both terms in the sum of consistent order of magnitude).

The Gragg-Bulirsch-Stoer is especially suited for high precision, small tolerances are therefore compliant with the method.

2.2. Does the ODE package in Mantissa support backward integration?


Yes it does. Backward integration is specified by setting a target time smaller than the initial time. Note that the minStep and maxStep parameters of the adaptive stepsize integrators must always be positive, even for backward integration.