1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.math4.legacy.fitting.leastsquares; 18 19 import org.apache.commons.math4.legacy.fitting.leastsquares.LeastSquaresProblem.Evaluation; 20 import org.apache.commons.math4.legacy.linear.RealMatrix; 21 import org.apache.commons.math4.legacy.linear.RealVector; 22 23 /** 24 * Applies a dense weight matrix to an evaluation. 25 * 26 * @since 3.3 27 */ 28 class DenseWeightedEvaluation extends AbstractEvaluation { 29 30 /** the unweighted evaluation. */ 31 private final Evaluation unweighted; 32 /** reference to the weight square root matrix. */ 33 private final RealMatrix weightSqrt; 34 35 /** 36 * Create a weighted evaluation from an unweighted one. 37 * 38 * @param unweighted the evaluation before weights are applied 39 * @param weightSqrt the matrix square root of the weight matrix 40 */ 41 DenseWeightedEvaluation(final Evaluation unweighted, 42 final RealMatrix weightSqrt) { 43 // weight square root is square, nR=nC=number of observations 44 super(weightSqrt.getColumnDimension()); 45 this.unweighted = unweighted; 46 this.weightSqrt = weightSqrt; 47 } 48 49 /* apply weights */ 50 51 /** {@inheritDoc} */ 52 @Override 53 public RealMatrix getJacobian() { 54 return weightSqrt.multiply(this.unweighted.getJacobian()); 55 } 56 57 /** {@inheritDoc} */ 58 @Override 59 public RealVector getResiduals() { 60 return this.weightSqrt.operate(this.unweighted.getResiduals()); 61 } 62 63 /* delegate */ 64 65 /** {@inheritDoc} */ 66 @Override 67 public RealVector getPoint() { 68 return unweighted.getPoint(); 69 } 70 }