    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.math3.optimization.fitting;
    019
    020    import org.apache.commons.math3.analysis.polynomials.PolynomialFunction;
    021    import org.apache.commons.math3.optimization.DifferentiableMultivariateVectorOptimizer;
    022
    023    /**
    024     * Polynomial fitting is a very simple case of {@link CurveFitter curve fitting}.
    025     * The estimated coefficients are the polynomial coefficients (see the
    026     * {@link #fit(double[]) fit} method).
    027     *
    028     * @version $Id: PolynomialFitter.java 1422313 2012-12-15 18:53:41Z psteitz $
    029     * @deprecated As of 3.1 (to be removed in 4.0).
    030     * @since 2.0
    031     */
    032    @Deprecated
    033    public class PolynomialFitter extends CurveFitter<PolynomialFunction.Parametric> {
    034        /** Polynomial degree.
    035         * @deprecated
    036         */
    037        @Deprecated
    038        private final int degree;
    039
    040        /**
    041         * Simple constructor.
    042         * <p>The polynomial fitter built this way are complete polynomials,
    043         * ie. a n-degree polynomial has n+1 coefficients.</p>
    044         *
    045         * @param degree Maximal degree of the polynomial.
    046         * @param optimizer Optimizer to use for the fitting.
    047         * @deprecated Since 3.1 (to be removed in 4.0). Please use
    048         * {@link #PolynomialFitter(DifferentiableMultivariateVectorOptimizer)} instead.
    049         */
    050        @Deprecated
    051        public PolynomialFitter(int degree, final DifferentiableMultivariateVectorOptimizer optimizer) {
    052            super(optimizer);
    053            this.degree = degree;
    054        }
    055
    056        /**
    057         * Simple constructor.
    058         *
    059         * @param optimizer Optimizer to use for the fitting.
    060         * @since 3.1
    061         */
    062        public PolynomialFitter(DifferentiableMultivariateVectorOptimizer optimizer) {
    063            super(optimizer);
    064            degree = -1; // To avoid compilation error until the instance variable is removed.
    065        }
    066
    067        /**
    068         * Get the polynomial fitting the weighted (x, y) points.
    069         *
    070         * @return the coefficients of the polynomial that best fits the observed points.
    071         * @throws org.apache.commons.math3.exception.ConvergenceException
    072         * if the algorithm failed to converge.
    073         * @deprecated Since 3.1 (to be removed in 4.0). Please use {@link #fit(double[])} instead.
    074         */
    075        @Deprecated
    076        public double[] fit() {
    077            return fit(new PolynomialFunction.Parametric(), new double[degree + 1]);
    078        }
    079
    080        /**
    081         * Get the coefficients of the polynomial fitting the weighted data points.
    082         * The degree of the fitting polynomial is {@code guess.length - 1}.
    083         *
    084         * @param guess First guess for the coefficients. They must be sorted in
    085         * increasing order of the polynomial's degree.
    086         * @param maxEval Maximum number of evaluations of the polynomial.
    087         * @return the coefficients of the polynomial that best fits the observed points.
    088         * @throws org.apache.commons.math3.exception.TooManyEvaluationsException if
    089         * the number of evaluations exceeds {@code maxEval}.
    090         * @throws org.apache.commons.math3.exception.ConvergenceException
    091         * if the algorithm failed to converge.
    092         * @since 3.1
    093         */
    094        public double[] fit(int maxEval, double[] guess) {
    095            return fit(maxEval, new PolynomialFunction.Parametric(), guess);
    096        }
    097
    098        /**
    099         * Get the coefficients of the polynomial fitting the weighted data points.
    100         * The degree of the fitting polynomial is {@code guess.length - 1}.
    101         *
    102         * @param guess First guess for the coefficients. They must be sorted in
    103         * increasing order of the polynomial's degree.
    104         * @return the coefficients of the polynomial that best fits the observed points.
    105         * @throws org.apache.commons.math3.exception.ConvergenceException
    106         * if the algorithm failed to converge.
    107         * @since 3.1
    108         */
    109        public double[] fit(double[] guess) {
    110            return fit(new PolynomialFunction.Parametric(), guess);
    111        }
    112    }