Repository: commons-math Updated Branches: refs/heads/master b81be1fea -> 96c8597c0
MATH-1416: Deleted "ContinuedFraction". Code is now part of "Commons Numbers" (in module "commons-numbers-fraction"). Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/96c8597c Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/96c8597c Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/96c8597c Branch: refs/heads/master Commit: 96c8597c0f6eba2252bae4107ddacabeaf2be0e6 Parents: b81be1f Author: Gilles <er...@apache.org> Authored: Sun May 21 04:53:09 2017 +0200 Committer: Gilles <er...@apache.org> Committed: Sun May 21 04:53:09 2017 +0200 ---------------------------------------------------------------------- .../commons/math4/util/ContinuedFraction.java | 180 ------------------- .../math4/util/ContinuedFractionTest.java | 46 ----- 2 files changed, 226 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-math/blob/96c8597c/src/main/java/org/apache/commons/math4/util/ContinuedFraction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/util/ContinuedFraction.java b/src/main/java/org/apache/commons/math4/util/ContinuedFraction.java deleted file mode 100644 index 536638e..0000000 --- a/src/main/java/org/apache/commons/math4/util/ContinuedFraction.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.math4.util; - -import org.apache.commons.numbers.core.Precision; -import org.apache.commons.math4.exception.ConvergenceException; -import org.apache.commons.math4.exception.MaxCountExceededException; -import org.apache.commons.math4.exception.util.LocalizedFormats; - -/** - * Provides a generic means to evaluate continued fractions. Subclasses simply - * provided the a and b coefficients to evaluate the continued fraction. - * - * <p> - * References: - * <ul> - * <li><a href="http://mathworld.wolfram.com/ContinuedFraction.html"> - * Continued Fraction</a></li> - * </ul> - * - */ -public abstract class ContinuedFraction { - /** Maximum allowed numerical error. */ - private static final double DEFAULT_EPSILON = 10e-9; - - /** - * Default constructor. - */ - protected ContinuedFraction() { - super(); - } - - /** - * Access the n-th a coefficient of the continued fraction. Since a can be - * a function of the evaluation point, x, that is passed in as well. - * @param n the coefficient index to retrieve. - * @param x the evaluation point. - * @return the n-th a coefficient. - */ - protected abstract double getA(int n, double x); - - /** - * Access the n-th b coefficient of the continued fraction. Since b can be - * a function of the evaluation point, x, that is passed in as well. - * @param n the coefficient index to retrieve. - * @param x the evaluation point. - * @return the n-th b coefficient. - */ - protected abstract double getB(int n, double x); - - /** - * Evaluates the continued fraction at the value x. - * @param x the evaluation point. - * @return the value of the continued fraction evaluated at x. - * @throws ConvergenceException if the algorithm fails to converge. - */ - public double evaluate(double x) throws ConvergenceException { - return evaluate(x, DEFAULT_EPSILON, Integer.MAX_VALUE); - } - - /** - * Evaluates the continued fraction at the value x. - * @param x the evaluation point. - * @param epsilon maximum error allowed. - * @return the value of the continued fraction evaluated at x. - * @throws ConvergenceException if the algorithm fails to converge. - */ - public double evaluate(double x, double epsilon) throws ConvergenceException { - return evaluate(x, epsilon, Integer.MAX_VALUE); - } - - /** - * Evaluates the continued fraction at the value x. - * @param x the evaluation point. - * @param maxIterations maximum number of convergents - * @return the value of the continued fraction evaluated at x. - * @throws ConvergenceException if the algorithm fails to converge. - * @throws MaxCountExceededException if maximal number of iterations is reached - */ - public double evaluate(double x, int maxIterations) - throws ConvergenceException, MaxCountExceededException { - return evaluate(x, DEFAULT_EPSILON, maxIterations); - } - - /** - * Evaluates the continued fraction at the value x. - * <p> - * The implementation of this method is based on the modified Lentz algorithm as described - * on page 18 ff. in: - * <ul> - * <li> - * I. J. Thompson, A. R. Barnett. "Coulomb and Bessel Functions of Complex Arguments and Order." - * <a target="_blank" href="http://www.fresco.org.uk/papers/Thompson-JCP64p490.pdf"> - * http://www.fresco.org.uk/papers/Thompson-JCP64p490.pdf</a> - * </li> - * </ul> - * <b>Note:</b> the implementation uses the terms a<sub>i</sub> and b<sub>i</sub> as defined in - * <a href="http://mathworld.wolfram.com/ContinuedFraction.html">Continued Fraction @ MathWorld</a>. - * - * @param x the evaluation point. - * @param epsilon maximum error allowed. - * @param maxIterations maximum number of convergents - * @return the value of the continued fraction evaluated at x. - * @throws ConvergenceException if the algorithm fails to converge. - * @throws MaxCountExceededException if maximal number of iterations is reached - */ - public double evaluate(double x, double epsilon, int maxIterations) - throws ConvergenceException, MaxCountExceededException { - final double small = 1e-50; - double hPrev = getA(0, x); - - // use the value of small as epsilon criteria for zero checks - if (Precision.equals(hPrev, 0.0, small)) { - hPrev = small; - } - - int n = 1; - double dPrev = 0.0; - double cPrev = hPrev; - double hN = hPrev; - - while (n < maxIterations) { - final double a = getA(n, x); - final double b = getB(n, x); - - double dN = a + b * dPrev; - if (Precision.equals(dN, 0.0, small)) { - dN = small; - } - double cN = a + b / cPrev; - if (Precision.equals(cN, 0.0, small)) { - cN = small; - } - - dN = 1 / dN; - final double deltaN = cN * dN; - hN = hPrev * deltaN; - - if (Double.isInfinite(hN)) { - throw new ConvergenceException(LocalizedFormats.CONTINUED_FRACTION_INFINITY_DIVERGENCE, - x); - } - if (Double.isNaN(hN)) { - throw new ConvergenceException(LocalizedFormats.CONTINUED_FRACTION_NAN_DIVERGENCE, - x); - } - - if (FastMath.abs(deltaN - 1.0) < epsilon) { - break; - } - - dPrev = dN; - cPrev = cN; - hPrev = hN; - n++; - } - - if (n >= maxIterations) { - throw new MaxCountExceededException(LocalizedFormats.NON_CONVERGENT_CONTINUED_FRACTION, - maxIterations, x); - } - - return hN; - } - -} http://git-wip-us.apache.org/repos/asf/commons-math/blob/96c8597c/src/test/java/org/apache/commons/math4/util/ContinuedFractionTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/util/ContinuedFractionTest.java b/src/test/java/org/apache/commons/math4/util/ContinuedFractionTest.java deleted file mode 100644 index 686fb51..0000000 --- a/src/test/java/org/apache/commons/math4/util/ContinuedFractionTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.math4.util; - -import org.apache.commons.math4.util.ContinuedFraction; -import org.junit.Assert; -import org.junit.Test; - - -/** - */ -public class ContinuedFractionTest { - - @Test - public void testGoldenRatio() throws Exception { - ContinuedFraction cf = new ContinuedFraction() { - - @Override - public double getA(int n, double x) { - return 1.0; - } - - @Override - public double getB(int n, double x) { - return 1.0; - } - }; - - double gr = cf.evaluate(0.0, 10e-9); - Assert.assertEquals(1.61803399, gr, 10e-9); - } -}