8template <
typename Scalar>
 
    9QuadraticResidualCostTpl<Scalar>::QuadraticResidualCostTpl(
 
   10    FunctionPtr residual, 
const ConstMatrixRef &weights,
 
   11    const ConstVectorRef &slope, 
const Scalar constant)
 
   12    : Base(residual->nx(), residual->ndx()), residual_(residual),
 
   13      weights_(weights), slope_(slope), constant_(constant),
 
   14      gauss_newton_(true), err(residual_->nr()),
 
   15      Jres(residual_->nr(), this->ndx()), JtW(this->ndx(), residual_->nr()),
 
   16      H(this->ndx(), this->ndx()) {
 
   23template <
typename Scalar>
 
   25  err = (*residual_)(x);
 
   29  tmp_w_err.noalias() = 
weights_ * err;
 
   30  Scalar res = Scalar(0.5) * err.dot(tmp_w_err) + err.dot(
slope_) + 
constant_;
 
 
   37template <
typename Scalar>
 
   38void QuadraticResidualCostTpl<Scalar>::computeGradient(
const ConstVectorRef &x,
 
   39                                                       VectorRef out)
 const {
 
   40  residual_->computeJacobian(x, Jres);
 
   42  JtW.noalias() = Jres.transpose() * weights_;
 
   43  out.noalias() = JtW * err;
 
   44  out.noalias() += Jres.transpose() * slope_;
 
   47template <
typename Scalar>
 
   48void QuadraticResidualCostTpl<Scalar>::computeHessian(
const ConstVectorRef &x,
 
   49                                                      MatrixRef out)
 const {
 
   50  tmp_w_err.noalias() = weights_ * err;
 
   54    residual_->vectorHessianProduct(x, tmp_w_err, H);
 
   62  JtW.noalias() = Jres.transpose() * 
weights_;
 
   63  out.noalias() += JtW * Jres;
 
 
#define PROXSUITE_NLP_NOMALLOC_END
Exiting performance-critical code.
 
#define PROXSUITE_NLP_NOMALLOC_BEGIN
Entering performance-critical code.
 
Scalar call(const ConstVectorRef &x) const
Evaluate the cost function.
 
Scalar constant_
Constant term .
 
MatrixXs weights_
Weights .