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

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.