All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.math3.fitting.leastsquares.LeastSquaresBuilder Maven / Gradle / Ivy

Go to download

The Apache Commons Math project is a library of lightweight, self-contained mathematics and statistics components addressing the most common practical problems not immediately available in the Java programming language or commons-lang.

There is a newer version: 3.6.1
Show newest version
/*
 * 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.math3.fitting.leastsquares;

import org.apache.commons.math3.analysis.MultivariateMatrixFunction;
import org.apache.commons.math3.analysis.MultivariateVectorFunction;
import org.apache.commons.math3.fitting.leastsquares.LeastSquaresProblem.Evaluation;
import org.apache.commons.math3.linear.ArrayRealVector;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.RealVector;
import org.apache.commons.math3.optim.ConvergenceChecker;
import org.apache.commons.math3.optim.PointVectorValuePair;

/**
 * A mutable builder for {@link LeastSquaresProblem}s.
 *
 * @see LeastSquaresFactory
 * @since 3.3
 */
public class LeastSquaresBuilder {

    /** max evaluations */
    private int maxEvaluations;
    /** max iterations */
    private int maxIterations;
    /** convergence checker */
    private ConvergenceChecker checker;
    /** model function */
    private MultivariateJacobianFunction model;
    /** observed values */
    private RealVector target;
    /** initial guess */
    private RealVector start;
    /** weight matrix */
    private RealMatrix weight;
    /**
     * Lazy evaluation.
     *
     * @since 3.4
     */
    private boolean lazyEvaluation;
    /** Validator.
     *
     * @since 3.4
     */
    private ParameterValidator paramValidator;


    /**
     * Construct a {@link LeastSquaresProblem} from the data in this builder.
     *
     * @return a new {@link LeastSquaresProblem}.
     */
    public LeastSquaresProblem build() {
        return LeastSquaresFactory.create(model,
                                          target,
                                          start,
                                          weight,
                                          checker,
                                          maxEvaluations,
                                          maxIterations,
                                          lazyEvaluation,
                                          paramValidator);
    }

    /**
     * Configure the max evaluations.
     *
     * @param newMaxEvaluations the maximum number of evaluations permitted.
     * @return this
     */
    public LeastSquaresBuilder maxEvaluations(final int newMaxEvaluations) {
        this.maxEvaluations = newMaxEvaluations;
        return this;
    }

    /**
     * Configure the max iterations.
     *
     * @param newMaxIterations the maximum number of iterations permitted.
     * @return this
     */
    public LeastSquaresBuilder maxIterations(final int newMaxIterations) {
        this.maxIterations = newMaxIterations;
        return this;
    }

    /**
     * Configure the convergence checker.
     *
     * @param newChecker the convergence checker.
     * @return this
     */
    public LeastSquaresBuilder checker(final ConvergenceChecker newChecker) {
        this.checker = newChecker;
        return this;
    }

    /**
     * Configure the convergence checker.
     * 

* This function is an overloaded version of {@link #checker(ConvergenceChecker)}. * * @param newChecker the convergence checker. * @return this */ public LeastSquaresBuilder checkerPair(final ConvergenceChecker newChecker) { return this.checker(LeastSquaresFactory.evaluationChecker(newChecker)); } /** * Configure the model function. * * @param value the model function value * @param jacobian the Jacobian of {@code value} * @return this */ public LeastSquaresBuilder model(final MultivariateVectorFunction value, final MultivariateMatrixFunction jacobian) { return model(LeastSquaresFactory.model(value, jacobian)); } /** * Configure the model function. * * @param newModel the model function value and Jacobian * @return this */ public LeastSquaresBuilder model(final MultivariateJacobianFunction newModel) { this.model = newModel; return this; } /** * Configure the observed data. * * @param newTarget the observed data. * @return this */ public LeastSquaresBuilder target(final RealVector newTarget) { this.target = newTarget; return this; } /** * Configure the observed data. * * @param newTarget the observed data. * @return this */ public LeastSquaresBuilder target(final double[] newTarget) { return target(new ArrayRealVector(newTarget, false)); } /** * Configure the initial guess. * * @param newStart the initial guess. * @return this */ public LeastSquaresBuilder start(final RealVector newStart) { this.start = newStart; return this; } /** * Configure the initial guess. * * @param newStart the initial guess. * @return this */ public LeastSquaresBuilder start(final double[] newStart) { return start(new ArrayRealVector(newStart, false)); } /** * Configure the weight matrix. * * @param newWeight the weight matrix * @return this */ public LeastSquaresBuilder weight(final RealMatrix newWeight) { this.weight = newWeight; return this; } /** * Configure whether evaluation will be lazy or not. * * @param newValue Whether to perform lazy evaluation. * @return this object. * * @since 3.4 */ public LeastSquaresBuilder lazyEvaluation(final boolean newValue) { lazyEvaluation = newValue; return this; } /** * Configure the validator of the model parameters. * * @param newValidator Parameter validator. * @return this object. * * @since 3.4 */ public LeastSquaresBuilder parameterValidator(final ParameterValidator newValidator) { paramValidator = newValidator; return this; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy