LeastSquaresBuilder.java
- /*
- * 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.legacy.fitting.leastsquares;
- import org.apache.commons.math4.legacy.analysis.MultivariateMatrixFunction;
- import org.apache.commons.math4.legacy.analysis.MultivariateVectorFunction;
- import org.apache.commons.math4.legacy.fitting.leastsquares.LeastSquaresProblem.Evaluation;
- import org.apache.commons.math4.legacy.linear.ArrayRealVector;
- import org.apache.commons.math4.legacy.linear.RealMatrix;
- import org.apache.commons.math4.legacy.linear.RealVector;
- import org.apache.commons.math4.legacy.optim.ConvergenceChecker;
- import org.apache.commons.math4.legacy.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<Evaluation> 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<Evaluation> newChecker) {
- this.checker = newChecker;
- return 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.
- *
- * @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;
- }
- }