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

Gilles commented on MATH-439:
-----------------------------

Refactoring introduced in revision 1039083.

Please review, as the code changed a lot.
The main change is that the API is uniform (restricted to the "solve" methods). 
Thus the functionality of the "LaguerreSolver" class has been reduced (some 
code was moved to a private inner class). If the "complex" functionality must 
be user-accessible, it should be separate from the "real" solvers; creating a 
{{analysis.solvers.complex}} sub-package might be appropriate...


The problem with {{NonLinearConjugateGradientOptimizer}} is not solved yet, but 
a workaround (that almost behaves as the previous code) lets the unit test pass.


> Refactoring of solvers (package "analysis.solvers")
> ---------------------------------------------------
>
>                 Key: MATH-439
>                 URL: https://issues.apache.org/jira/browse/MATH-439
>             Project: Commons Math
>          Issue Type: Improvement
>            Reporter: Gilles
>            Priority: Minor
>             Fix For: 3.0
>
>         Attachments: AbstractUnivariateRealSolver.java, 
> NLCG.testCircleFitting.txt
>
>
> The classes in package "analysis.solvers" could be refactored similarly to 
> what was done for package {{optimization}}.
> * Replace {{MaxIterationsExceededException}} with 
> {{TooManyEvaluationsException}}:
> Apart from the class {{MaxIterationsExceededException}} being deprecated, 
> this approach makes it difficult to compare different algorithms: While the 
> concept of iteration is algorithm-dependent, the user is probably mostly 
> interested in the number of function evaluations. 
> * Implement the method {{solve}} in the base class 
> ({{UnivariateRealSolverImpl}}) and define an abstract method {{doSolve}} to 
> be implemented in derived classes. This method would then use a new 
> {{computeObjectiveFunction}} method that will take care of the counting of 
> the function evaluations.
> * Remove "protected" fields (the root is unnecessary since it is returned by 
> {{solve}}). Arguingly the function value is also not very useful (as we know 
> what it should be), except for debugging purposes (in which case, it might 
> not be a problem to call the function's {{value}} method once more).
> * Remove the tolerance setter (accuracy) and make the corresponding fields 
> "final".

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to