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 .