[
https://issues.apache.org/jira/browse/MATH-631?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13081162#comment-13081162
]
Luc Maisonobe commented on MATH-631:
------------------------------------
{code}
May I please know *why it is OK that a bit of code does loop counting and
repeatedly computes the same thing!*
{code}
We didn't say that. We said that regula falsi is a standard *bad* algorithm. We
said that very smart people have enhanced it 40 years ago and the enhanced
versions are known and already implemented in Commons Math. These algorithms
are *not* blind loop counters and they insert smart target shifts that
*prevent* the behavior we observe here. These algorithms not only detect the
problem, they fix it! They allow convergence along x. They allow selection of
the side of the root.
{code}
The function is potentially evaluated millions of times at the same point.
{code}
The maxEvaluations is already here to prevent this, and in fact now this max
number is even mandatory in the solve method (you placed it if I remember
correctly). So the function is called millions of time only if the users wishes
so by setting the maxEvaluations to a number in the range of millions.
{code}
And may I please know *why it is OK that an algorithm that finds the right
result does not return it.*
{code}
If the user asked for a convergence in x or for a convergence on y on the side
that is stuck, then no, the algorithm did not find the right result. One of its
bounds converged but the users asked for something else.
{code}
You just have to run the code and print "x" and "x1" to see what is going on!
{code}
We know exactly what is going on! We know the algorithm is stuck. We know why
it is stuck. We know why it did not detect it is stuck. We know it will finally
hit the safety maxEvaluation threshold that is just waiting for that. And we
know that removing all these problems is done by using other algorithms which
are already there.
Regula falsi is doomed. It is an algorithm used for educational purposes, or
for comparison purposes, not something suited for production use. It is just
like Euler for ODE (and by the way we did implement Euler for ODE and we don't
recommend users to use it as we also did implement better algorithms that were
also designed by smart mathematicians decades ago).
> "RegulaFalsiSolver" failure
> ---------------------------
>
> Key: MATH-631
> URL: https://issues.apache.org/jira/browse/MATH-631
> Project: Commons Math
> Issue Type: Bug
> Reporter: Gilles
> Fix For: 3.0
>
>
> The following unit test:
> {code}
> @Test
> public void testBug() {
> final UnivariateRealFunction f = new UnivariateRealFunction() {
> @Override
> public double value(double x) {
> return Math.exp(x) - Math.pow(Math.PI, 3.0);
> }
> };
> UnivariateRealSolver solver = new RegulaFalsiSolver();
> double root = solver.solve(100, f, 1, 10);
> }
> {code}
> fails with
> {noformat}
> illegal state: maximal count (100) exceeded: evaluations
> {noformat}
> Using "PegasusSolver", the answer is found after 17 evaluations.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira