22struct QuadraticResidualCostTpl :
public CostFunctionBaseTpl<_Scalar> {
24 using Scalar = _Scalar;
27 using RowMatrixXs = Eigen::Matrix<Scalar, -1, -1, Eigen::RowMajor>;
29 using Base::computeGradient;
30 using Base::computeHessian;
31 using FunctionPtr = shared_ptr<FunctionType>;
43 QuadraticResidualCostTpl(FunctionPtr residual,
const ConstMatrixRef &weights,
44 const ConstVectorRef &slope,
45 const Scalar constant = Scalar(0.));
47 QuadraticResidualCostTpl(FunctionPtr residual,
const ConstMatrixRef &weights,
48 const Scalar constant = Scalar(0.))
49 : QuadraticResidualCostTpl(residual, weights,
50 VectorXs::Zero(residual->
nr()), constant) {}
54 template <
typename Underlying,
typename... ResidualArgs>
56 const ConstVectorRef &slope,
const Scalar constant,
57 ResidualArgs &...args)
58 : QuadraticResidualCostTpl(std::make_shared<Underlying>(args...), weights,
61 Scalar
call(
const ConstVectorRef &x)
const;
63 void computeGradient(
const ConstVectorRef &x, VectorRef out)
const;
65 void computeHessian(
const ConstVectorRef &x, MatrixRef out)
const;
69 mutable VectorXs tmp_w_err;
70 mutable MatrixXs Jres;
71 mutable RowMatrixXs JtW;