Return-Path: Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: (qmail 15782 invoked from network); 15 Nov 2010 22:28:06 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 15 Nov 2010 22:28:06 -0000 Received: (qmail 55948 invoked by uid 500); 15 Nov 2010 22:28:37 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 55899 invoked by uid 500); 15 Nov 2010 22:28:37 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 55891 invoked by uid 99); 15 Nov 2010 22:28:37 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Nov 2010 22:28:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.22] (HELO thor.apache.org) (140.211.11.22) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Nov 2010 22:28:35 +0000 Received: from thor (localhost [127.0.0.1]) by thor.apache.org (8.13.8+Sun/8.13.8) with ESMTP id oAFMSEfB017373 for ; Mon, 15 Nov 2010 22:28:14 GMT Message-ID: <32843152.92981289860093985.JavaMail.jira@thor> Date: Mon, 15 Nov 2010 17:28:13 -0500 (EST) From: "Gilles (JIRA)" To: issues@commons.apache.org Subject: [jira] Commented: (MATH-439) Refactoring of solvers (package "analysis.solvers") In-Reply-To: <18591924.45371289567236619.JavaMail.jira@thor> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/MATH-439?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12932232#action_12932232 ] Gilles commented on MATH-439: ----------------------------- I'm not an "interface" fanatic, meaning that everything should have its {code} interface Something { // ... } {code} together with a {code} public class SomethingImpl { // ... } {code} Especially when there is a single best way to implement the "Something". In that sense, I find the {{UnivariateRealSolveFactory}} and its associated {{UnivariateRealSolveFactoryImpl}} quite clumsy (the more so that the former is not even an interface). However, in the {{UnivariateRealSolver}} case, I find it completely appropriate that the interface should be an exact image of the full behaviour of the implementing classes. If not, it has no purpose from a programming design viewpoint. For example, in the {{optimization}} package, there is a specialized interface for optimizers that rely on differentiability of the objective function. It should be the same here for the {{NewtonSolver}}. Similarly, there are also separate interfaces for scalar and vectorial functions; so for the solvers too, we should find a design that clearly distinguish between real solvers and complex solvers. > 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 > > > 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.