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