/*
* 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 LeastSquaresProblem
s. 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;
}
}