Author: luc Date: Sun Jan 18 11:48:52 2009 New Revision: 735530 URL: http://svn.apache.org/viewvc?rev=735530&view=rev Log: trying to recover history for solvers
Added: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BisectionSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/LaguerreSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/NewtonSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/RiddersSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/SecantSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolver.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactory.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java (contents, props changed) - copied, changed from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverUtils.java Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BisectionSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BisectionSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BisectionSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java Sun Jan 18 11:48:52 2009 @@ -14,10 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** * Implements the <a href="http://mathworld.wolfram.com/Bisection.html"> Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BisectionSolver.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java Sun Jan 18 11:48:52 2009 @@ -14,11 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.FunctionEvaluationException; +import org.apache.commons.math.MathRuntimeException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** * Implements the <a href="http://mathworld.wolfram.com/BrentsMethod.html"> @@ -92,11 +94,8 @@ final double min, final double max, final double initial) throws MaxIterationsExceededException, FunctionEvaluationException { - if (((initial - min) * (max -initial)) < 0) { - throw new IllegalArgumentException("Initial guess is not in search" + - " interval." + " Initial: " + initial + - " Endpoints: [" + min + "," + max + "]"); - } + clearResult(); + verifySequence(min, initial, max); // return the initial guess if it is good enough double yInitial = f.value(initial); @@ -176,10 +175,10 @@ ret = max; } else { // neither value is close to zero and min and max do not bracket root. - throw new IllegalArgumentException - ("Function values at endpoints do not have different signs." + - " Endpoints: [" + min + "," + max + "]" + - " Values: [" + yMin + "," + yMax + "]"); + throw MathRuntimeException.createIllegalArgumentException( + "function values at endpoints do not have different signs. " + + "Endpoints: [{0}, {1}], Values: [{2}, {3}]", + new Object[] { min, max, yMin, yMax }); } } else if (sign < 0){ // solve using only the first endpoint as initial guess Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/BrentSolver.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/LaguerreSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/LaguerreSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/LaguerreSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java Sun Jan 18 11:48:52 2009 @@ -14,12 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.ConvergenceException; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MathRuntimeException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.UnivariateRealFunction; +import org.apache.commons.math.analysis.polynomials.PolynomialFunction; import org.apache.commons.math.complex.Complex; /** Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/LaguerreSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java Sun Jan 18 11:48:52 2009 @@ -14,11 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.ConvergenceException; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.UnivariateRealFunction; import org.apache.commons.math.util.MathUtils; /** Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/MullerSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/NewtonSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/NewtonSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/NewtonSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java Sun Jan 18 11:48:52 2009 @@ -15,11 +15,13 @@ * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MathRuntimeException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.DifferentiableUnivariateRealFunction; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** * Implements <a href="http://mathworld.wolfram.com/NewtonsMethod.html"> Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/NewtonSolver.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/RiddersSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/RiddersSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/RiddersSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java Sun Jan 18 11:48:52 2009 @@ -14,11 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.ConvergenceException; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.UnivariateRealFunction; import org.apache.commons.math.util.MathUtils; /** Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/RiddersSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/SecantSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/SecantSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/SecantSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java Sun Jan 18 11:48:52 2009 @@ -14,13 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import java.io.Serializable; import org.apache.commons.math.ConvergenceException; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MaxIterationsExceededException; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/SecantSolver.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolver.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolver.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolver.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java Sun Jan 18 11:48:52 2009 @@ -14,10 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.ConvergenceException; +import org.apache.commons.math.ConvergingAlgorithm; import org.apache.commons.math.FunctionEvaluationException; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** @@ -27,96 +29,7 @@ * * @version $Revision$ $Date$ */ -public interface UnivariateRealSolver { - - /** - * Set the upper limit for the number of iterations. - * <p> - * Usually a high iteration count indicates convergence problems. However, - * the "reasonable value" varies widely for different solvers. Users are - * advised to use the default value supplied by the solver.</p> - * <p> - * A <code>ConvergenceException</code> will be thrown if this number - * is exceeded.</p> - * - * @param count maximum number of iterations - */ - void setMaximalIterationCount(int count); - - /** - * Get the upper limit for the number of iterations. - * - * @return the actual upper limit - */ - int getMaximalIterationCount(); - - /** - * Reset the upper limit for the number of iterations to the default. - * <p> - * The default value is supplied by the solver implementation.</p> - * - * @see #setMaximalIterationCount(int) - */ - void resetMaximalIterationCount(); - - /** - * Set the absolute accuracy. - * <p> - * The default is usually choosen so that roots in the interval - * -10..-0.1 and +0.1..+10 can be found with a reasonable accuracy. If the - * expected absolute value of your roots is of much smaller magnitude, set - * this to a smaller value.</p> - * <p> - * Solvers are advised to do a plausibility check with the relative - * accuracy, but clients should not rely on this.</p> - * - * @param accuracy the accuracy. - * @throws IllegalArgumentException if the accuracy can't be achieved by - * the solver or is otherwise deemed unreasonable. - */ - void setAbsoluteAccuracy(double accuracy); - - /** - * Get the actual absolute accuracy. - * - * @return the accuracy - */ - double getAbsoluteAccuracy(); - - /** - * Reset the absolute accuracy to the default. - * <p> - * The default value is provided by the solver implementation.</p> - */ - void resetAbsoluteAccuracy(); - - /** - * Set the relative accuracy. - * <p> - * This is used to stop iterations if the absolute accuracy can't be - * achieved due to large values or short mantissa length.</p> - * <p> - * If this should be the primary criterion for convergence rather then a - * safety measure, set the absolute accuracy to a ridiculously small value, - * like 1E-1000.</p> - * - * @param accuracy the relative accuracy. - * @throws IllegalArgumentException if the accuracy can't be achieved by - * the solver or is otherwise deemed unreasonable. - */ - void setRelativeAccuracy(double accuracy); - - /** - * Get the actual relative accuracy. - * @return the accuracy - */ - double getRelativeAccuracy(); - - /** - * Reset the relative accuracy to the default. - * The default value is provided by the solver implementation. - */ - void resetRelativeAccuracy(); +public interface UnivariateRealSolver extends ConvergingAlgorithm { /** * Set the function value accuracy. @@ -204,7 +117,7 @@ */ @Deprecated double solve(double min, double max, double startValue) - throws ConvergenceException, FunctionEvaluationException; + throws ConvergenceException, FunctionEvaluationException, IllegalArgumentException; /** * Solve for a zero in the given interval, start at startValue. @@ -224,7 +137,7 @@ * @since 2.0 */ double solve(UnivariateRealFunction f, double min, double max, double startValue) - throws ConvergenceException, FunctionEvaluationException; + throws ConvergenceException, FunctionEvaluationException, IllegalArgumentException; /** * Get the result of the last run of the solver. @@ -236,17 +149,11 @@ double getResult(); /** - * Get the number of iterations in the last run of the solver. - * <p> - * This is mainly meant for testing purposes. It may occasionally - * help track down performance problems: if the iteration count - * is notoriously high, check whether the function is evaluated - * properly, and whether another solver is more amenable to the - * problem.</p> + * Get the result of the last run of the solver. * - * @return the last iteration count. + * @return the value of the function at the last result. * @throws IllegalStateException if there is no result available, either * because no result was yet computed or the last attempt failed. */ - int getIterationCount(); + double getFunctionValue(); } \ No newline at end of file Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolver.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactory.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactory.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactory.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java Sun Jan 18 11:48:52 2009 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; /** * Abstract factory class used to create {...@link UnivariateRealSolver} instances. Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactory.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java Sun Jan 18 11:48:52 2009 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; /** * A concrete {...@link UnivariateRealSolverFactory}. This is the default solver factory Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverFactoryImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java Sun Jan 18 11:48:52 2009 @@ -15,12 +15,12 @@ * limitations under the License. */ -package org.apache.commons.math.analysis; - -import java.io.Serializable; +package org.apache.commons.math.analysis.solvers; +import org.apache.commons.math.ConvergingAlgorithmImpl; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.MathRuntimeException; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** * Provide a default implementation for several functions useful to generic @@ -28,45 +28,26 @@ * * @version $Revision$ $Date$ */ -public abstract class UnivariateRealSolverImpl implements UnivariateRealSolver, - Serializable { +public abstract class UnivariateRealSolverImpl + extends ConvergingAlgorithmImpl implements UnivariateRealSolver { /** Serializable version identifier */ private static final long serialVersionUID = 1112491292565386596L; - /** Maximum absolute error. */ - protected double absoluteAccuracy; - - /** Maximum relative error. */ - protected double relativeAccuracy; - /** Maximum error of function. */ protected double functionValueAccuracy; - /** Maximum number of iterations. */ - protected int maximalIterationCount; - - /** Default maximum absolute error. */ - protected double defaultAbsoluteAccuracy; - - /** Default maximum relative error. */ - protected double defaultRelativeAccuracy; - /** Default maximum error of function. */ protected double defaultFunctionValueAccuracy; - /** Default maximum number of iterations. */ - protected int defaultMaximalIterationCount; - /** Indicates where a root has been computed. */ protected boolean resultComputed = false; /** The last computed root. */ protected double result; - // Mainly for test framework. - /** The last iteration count. */ - protected int iterationCount; + /** Value of the function at the last computed result. */ + protected double functionValue; /** The function to solve. * @deprecated as of 2.0 the function to solve is passed as an argument @@ -90,25 +71,17 @@ * method. */ @Deprecated - protected UnivariateRealSolverImpl( - UnivariateRealFunction f, - int defaultMaximalIterationCount, - double defaultAbsoluteAccuracy) { - + protected UnivariateRealSolverImpl(final UnivariateRealFunction f, + final int defaultMaximalIterationCount, + final double defaultAbsoluteAccuracy) { + super(defaultMaximalIterationCount, defaultAbsoluteAccuracy); if (f == null) { throw MathRuntimeException.createIllegalArgumentException("function to solve cannot be null", null); } this.f = f; - - this.defaultAbsoluteAccuracy = defaultAbsoluteAccuracy; - this.defaultRelativeAccuracy = 1E-14; - this.defaultFunctionValueAccuracy = 1E-15; - this.absoluteAccuracy = defaultAbsoluteAccuracy; - this.relativeAccuracy = defaultRelativeAccuracy; + this.defaultFunctionValueAccuracy = 1.0e-15; this.functionValueAccuracy = defaultFunctionValueAccuracy; - this.defaultMaximalIterationCount = defaultMaximalIterationCount; - this.maximalIterationCount = defaultMaximalIterationCount; } /** @@ -119,172 +92,85 @@ * @throws IllegalArgumentException if f is null or the * defaultAbsoluteAccuracy is not valid */ - protected UnivariateRealSolverImpl(int defaultMaximalIterationCount, - double defaultAbsoluteAccuracy) { - this.defaultAbsoluteAccuracy = defaultAbsoluteAccuracy; - this.defaultRelativeAccuracy = 1E-14; - this.defaultFunctionValueAccuracy = 1E-15; - this.absoluteAccuracy = defaultAbsoluteAccuracy; - this.relativeAccuracy = defaultRelativeAccuracy; + protected UnivariateRealSolverImpl(final int defaultMaximalIterationCount, + final double defaultAbsoluteAccuracy) { + super(defaultMaximalIterationCount, defaultAbsoluteAccuracy); + this.defaultFunctionValueAccuracy = 1.0e-15; this.functionValueAccuracy = defaultFunctionValueAccuracy; - this.defaultMaximalIterationCount = defaultMaximalIterationCount; - this.maximalIterationCount = defaultMaximalIterationCount; } - /** - * Access the last computed root. - * - * @return the last computed root - * @throws IllegalStateException if no root has been computed + /** Check if a result has been computed. + * @exception IllegalStateException if no result has been computed */ - public double getResult() { - if (resultComputed) { - return result; - } else { + protected void checkResultComputed() throws IllegalStateException { + if (!resultComputed) { throw MathRuntimeException.createIllegalStateException("no result available", null); } } - /** - * Access the last iteration count. - * - * @return the last iteration count - * @throws IllegalStateException if no root has been computed - * - */ - public int getIterationCount() { - if (resultComputed) { - return iterationCount; - } else { - throw MathRuntimeException.createIllegalStateException("no result available", null); - } - } - - /** - * Convenience function for implementations. - * - * @param result the result to set - * @param iterationCount the iteration count to set - */ - protected final void setResult(double result, int iterationCount) { - this.result = result; - this.iterationCount = iterationCount; - this.resultComputed = true; - } - - /** - * Convenience function for implementations. - */ - protected final void clearResult() { - this.resultComputed = false; - } - - /** - * Set the absolute accuracy. - * - * @param accuracy the accuracy. - * @throws IllegalArgumentException if the accuracy can't be achieved by - * the solver or is otherwise deemed unreasonable. - */ - public void setAbsoluteAccuracy(double accuracy) { - absoluteAccuracy = accuracy; + /** {...@inheritdoc} */ + public double getResult() { + checkResultComputed(); + return result; } - /** - * Get the actual absolute accuracy. - * - * @return the accuracy - */ - public double getAbsoluteAccuracy() { - return absoluteAccuracy; + /** {...@inheritdoc} */ + public double getFunctionValue() { + checkResultComputed(); + return functionValue; } - /** - * Reset the absolute accuracy to the default. - */ - public void resetAbsoluteAccuracy() { - absoluteAccuracy = defaultAbsoluteAccuracy; - } - - /** - * Set the upper limit for the number of iterations. - * - * @param count maximum number of iterations - */ - public void setMaximalIterationCount(int count) { - maximalIterationCount = count; + /** {...@inheritdoc} */ + public void setFunctionValueAccuracy(final double accuracy) { + functionValueAccuracy = accuracy; } - /** - * Get the upper limit for the number of iterations. - * - * @return the actual upper limit - */ - public int getMaximalIterationCount() { - return maximalIterationCount; + /** {...@inheritdoc} */ + public double getFunctionValueAccuracy() { + return functionValueAccuracy; } - /** - * Reset the upper limit for the number of iterations to the default. - */ - public void resetMaximalIterationCount() { - maximalIterationCount = defaultMaximalIterationCount; + /** {...@inheritdoc} */ + public void resetFunctionValueAccuracy() { + functionValueAccuracy = defaultFunctionValueAccuracy; } /** - * Set the relative accuracy. + * Convenience function for implementations. * - * @param accuracy the relative accuracy. - * @throws IllegalArgumentException if the accuracy can't be achieved by - * the solver or is otherwise deemed unreasonable. - */ - public void setRelativeAccuracy(double accuracy) { - relativeAccuracy = accuracy; - } - - /** - * Get the actual relative accuracy. - * @return the accuracy - */ - public double getRelativeAccuracy() { - return relativeAccuracy; - } - - /** - * Reset the relative accuracy to the default. + * @param result the result to set + * @param iterationCount the iteration count to set */ - public void resetRelativeAccuracy() { - relativeAccuracy = defaultRelativeAccuracy; + protected final void setResult(final double result, final int iterationCount) { + this.result = result; + this.iterationCount = iterationCount; + this.resultComputed = true; } /** - * Set the function value accuracy. + * Convenience function for implementations. * - * @param accuracy the accuracy. - * @throws IllegalArgumentException if the accuracy can't be achieved by - * the solver or is otherwise deemed unreasonable. + * @param x the result to set + * @param fx the result to set + * @param iterationCount the iteration count to set */ - public void setFunctionValueAccuracy(double accuracy) { - functionValueAccuracy = accuracy; + protected final void setResult(final double x, final double fx, + final int iterationCount) { + this.result = x; + this.functionValue = fx; + this.iterationCount = iterationCount; + this.resultComputed = true; } /** - * Get the actual function value accuracy. - * @return the accuracy + * Convenience function for implementations. */ - public double getFunctionValueAccuracy() { - return functionValueAccuracy; + protected final void clearResult() { + this.iterationCount = 0; + this.resultComputed = false; } /** - * Reset the actual function accuracy to the default. - */ - public void resetFunctionValueAccuracy() { - functionValueAccuracy = defaultFunctionValueAccuracy; - } - - - /** * Returns true iff the function takes opposite signs at the endpoints. * * @param lower the lower endpoint @@ -294,10 +180,11 @@ * @throws FunctionEvaluationException if an error occurs evaluating the * function at the endpoints */ - protected boolean isBracketing(double lower, double upper, - UnivariateRealFunction f) throws FunctionEvaluationException { - double f1 = f.value(lower); - double f2 = f.value(upper); + protected boolean isBracketing(final double lower, final double upper, + final UnivariateRealFunction f) + throws FunctionEvaluationException { + final double f1 = f.value(lower); + final double f2 = f.value(upper); return ((f1 > 0 && f2 < 0) || (f1 < 0 && f2 > 0)); } @@ -309,7 +196,7 @@ * @param end third number * @return true if the arguments form an increasing sequence */ - protected boolean isSequence(double start, double mid, double end) { + protected boolean isSequence(final double start, final double mid, final double end) { return (start < mid) && (mid < end); } @@ -321,11 +208,11 @@ * @param upper upper endpoint * @throws IllegalArgumentException */ - protected void verifyInterval(double lower, double upper) { + protected void verifyInterval(final double lower, final double upper) { if (lower >= upper) { - throw new IllegalArgumentException - ("Endpoints do not specify an interval: [" + lower + - "," + upper + "]"); + throw MathRuntimeException.createIllegalArgumentException( + "endpoints do not specify an interval: [{0}, {1}]", + new Object[] { lower, upper }); } } @@ -338,11 +225,11 @@ * @param upper upper endpoint * @throws IllegalArgumentException */ - protected void verifySequence(double lower, double initial, double upper) { + protected void verifySequence(final double lower, final double initial, final double upper) { if (!isSequence(lower, initial, upper)) { - throw new IllegalArgumentException - ("Invalid interval, initial value parameters: lower=" + - lower + " initial=" + initial + " upper=" + upper); + throw MathRuntimeException.createIllegalArgumentException( + "invalid interval, initial value parameters: lower={0}, initial={1}, upper={2}", + new Object[] { lower, initial, upper }); } } @@ -357,15 +244,16 @@ * @throws FunctionEvaluationException if an error occurs evaluating the * function at the endpoints */ - protected void verifyBracketing(double lower, double upper, - UnivariateRealFunction f) throws FunctionEvaluationException { + protected void verifyBracketing(final double lower, final double upper, + final UnivariateRealFunction f) + throws FunctionEvaluationException { verifyInterval(lower, upper); if (!isBracketing(lower, upper, f)) { - throw new IllegalArgumentException - ("Function values at endpoints do not have different signs." + - " Endpoints: [" + lower + "," + upper + "]" + - " Values: [" + f.value(lower) + "," + f.value(upper) + "]"); + throw MathRuntimeException.createIllegalArgumentException( + "function values at endpoints do not have different signs. " + + "Endpoints: [{0}, {1}], Values: [{2}, {3}]", + new Object[] { lower, upper, f.value(lower), f.value(upper) }); } } } Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java (from r735448, commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverUtils.java) URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java?p2=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java&p1=commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverUtils.java&r1=735448&r2=735530&rev=735530&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/UnivariateRealSolverUtils.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java Sun Jan 18 11:48:52 2009 @@ -14,10 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.math.analysis; +package org.apache.commons.math.analysis.solvers; import org.apache.commons.math.FunctionEvaluationException; import org.apache.commons.math.ConvergenceException; +import org.apache.commons.math.analysis.UnivariateRealFunction; /** * Utility routines for {...@link UnivariateRealSolver} objects. Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java ------------------------------------------------------------------------------ svn:mergeinfo = Propchange: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/solvers/UnivariateRealSolverUtils.java ------------------------------------------------------------------------------ svn:mime-type = text/plain