[ 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.