commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gilles (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MATH-599) Re-implementation of Secant-based root finding algorithms
Date Sat, 23 Jul 2011 12:09:09 GMT

    [ https://issues.apache.org/jira/browse/MATH-599?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13069945#comment-13069945
] 

Gilles commented on MATH-599:
-----------------------------

Thanks for reporting; I've already found a copy/paste bug in the code, although I don't think
it is the cause of your problem.

{noformat}
FindRoot[Exp[x]==Pi^3,{x,1,10}, RegulaFalsi] 
{noformat}

I'm not used to this syntax (sorry), what is the function?

{quote}
Shouldn't there be a test for a "maximum iteration" [...]
{quote}

No, the failure criterion is the number of function evaluations, which is taken care of in
the parent class through the {{computeObjectiveValue}} method.


> Re-implementation of Secant-based root finding algorithms
> ---------------------------------------------------------
>
>                 Key: MATH-599
>                 URL: https://issues.apache.org/jira/browse/MATH-599
>             Project: Commons Math
>          Issue Type: Improvement
>            Reporter: Dennis Hendriks
>              Labels: documentation, patch
>             Fix For: 3.0
>
>         Attachments: secant-based-root-finding-algos.patch, secant-based-root-finding-algos2.patch,
secant-based-root-finding-algos2.zip
>
>
> Apache Commons Math currently has a SecantSolver. It is unclear exactly what algorithm
this solver implements. It states: "The algorithm is modified to maintain bracketing of a
root by successive approximations. Because of forced bracketing, convergence may be slower
than the unrestricted Secant algorithm. However, this implementation should in general outperform
the Regula Falsi method." The Regula Falsi method is exactly the Secant method modified to
maintain a bracketed solution. It is therefore unclear what other modifications were done
to make it 'better' than the Regula Falsi method.
> Besides the Secant and Regula Falsi methods, several other Secant-based root-finding
algorithms exist, such as the the Illinois method, and the Pegasus method. All 4 are well-known,
publisched algorithms.
> I created a patch, which changes the following:
>  - Removed SecantSolver root-finding algorithm.
>  - Implemented new Secant-based root-finding algorithms: SecantSolver, RegulaFalsiSolver,
IllinoisSolver, and PegasusSolver.
>  - Introduced BracketedSolution interface and AllowedSolutions enumeration, to control
allowed solutions (under-approximations and over-approximations) for bracketed root-finding
algorithms. Implemented for RegulaFalsiSolver, IllinoisSolver, and PegasusSolver.
>  - Fixed documentation of BaseUnivariateRealSolver.solve methods, such that documentation
order of arguments matches the order of the actual arguments.
> Note that the original SecantSolver was removed, and replaced by a root-finding algorithm
that actually implements the Secant root-finding algorithm. As such, existing code using the
SecantSolver is not backwards compatible. That is, even though the new SecantSolver does implement
the same interfaces, the root-finding solutions may differ. In particular, the new SecantSolver
does not maintain a bracketed solution, and does not guarantee convergence.
> I added unit tests, and I did a build, including checkstyle checking. I did not fix all
checkstyle warnings though, as I consider some of them false positives.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message