/*
 * 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 LeastSquaresProblems.
See Also:
Since:3.3
/** * A mutable builder for {@link LeastSquaresProblem}s. * * @see LeastSquaresFactory * @since 3.3 */
public class LeastSquaresBuilder {
max evaluations
/** max evaluations */
private int maxEvaluations;
max iterations
/** max iterations */
private int maxIterations;
convergence checker
/** convergence checker */
private ConvergenceChecker<Evaluation> checker;
model function
/** model function */
private MultivariateJacobianFunction model;
observed values
/** observed values */
private RealVector target;
initial guess
/** initial guess */
private RealVector start;
weight matrix
/** weight matrix */
private RealMatrix weight;
Lazy evaluation.
Since:3.4
/** * Lazy evaluation. * * @since 3.4 */
private boolean lazyEvaluation;
Validator.
Since:3.4
/** Validator. * * @since 3.4 */
private ParameterValidator paramValidator;
Construct a LeastSquaresProblem from the data in this builder.
Returns:a new LeastSquaresProblem.
/** * 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.
Params:
  • newMaxEvaluations – the maximum number of evaluations permitted.
Returns:this
/** * 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.
Params:
  • newMaxIterations – the maximum number of iterations permitted.
Returns: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.
Params:
  • newChecker – the convergence checker.
Returns:this
/** * Configure the convergence checker. * * @param newChecker the convergence checker. * @return this */
public LeastSquaresBuilder checker(final ConvergenceChecker<Evaluation> newChecker) { this.checker = newChecker; return this; }
Configure the convergence checker.

This function is an overloaded version of checker(ConvergenceChecker<Evaluation>).
Params:
  • newChecker – the convergence checker.
Returns:this
/** * Configure the convergence checker. * <p/> * This function is an overloaded version of {@link #checker(ConvergenceChecker)}. * * @param newChecker the convergence checker. * @return this */
public LeastSquaresBuilder checkerPair(final ConvergenceChecker<PointVectorValuePair> newChecker) { return this.checker(LeastSquaresFactory.evaluationChecker(newChecker)); }
Configure the model function.
Params:
  • value – the model function value
  • jacobian – the Jacobian of value
Returns:this
/** * 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.
Params:
  • newModel – the model function value and Jacobian
Returns:this
/** * 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.
Params:
  • newTarget – the observed data.
Returns: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.
Params:
  • newTarget – the observed data.
Returns: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.
Params:
  • newStart – the initial guess.
Returns:this
/** * 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.
Params:
  • newStart – the initial guess.
Returns: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.
Params:
  • newWeight – the weight matrix
Returns:this
/** * 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.
Params:
  • newValue – Whether to perform lazy evaluation.
Returns:this object.
Since:3.4
/** * 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.
Params:
  • newValidator – Parameter validator.
Returns:this object.
Since:3.4
/** * 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; } }