27 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION 28 #include <boost/serialization/version.hpp> 29 #include <boost/serialization/split_member.hpp> 37 class GaussianFactorGraph;
49 GTSAM_EXPORT std::pair<std::shared_ptr<GaussianConditional>, std::shared_ptr<JacobianFactor> >
50 EliminateQR(
const GaussianFactorGraph& factors,
const Ordering& keys);
99 typedef VerticalBlockMatrix::Block ABlock;
100 typedef VerticalBlockMatrix::constBlock constABlock;
101 typedef ABlock::ColXpr BVector;
102 typedef constABlock::ConstColXpr constBVector;
107 noiseModel::Diagonal::shared_ptr model_;
128 const Vector& b,
const SharedDiagonal& model = SharedDiagonal());
132 Key i2,
const Matrix& A2,
133 const Vector& b,
const SharedDiagonal& model = SharedDiagonal());
137 const Matrix& A2,
Key i3,
const Matrix& A3,
138 const Vector& b,
const SharedDiagonal& model = SharedDiagonal());
143 template<
typename TERMS>
144 JacobianFactor(
const TERMS& terms,
const Vector& b,
const SharedDiagonal& model = SharedDiagonal());
150 template<
typename KEYS>
152 const KEYS& keys,
const VerticalBlockMatrix& augmentedMatrix,
const SharedDiagonal& sigmas = SharedDiagonal());
192 std::make_shared<JacobianFactor>(*this));
196 void print(
const std::string& s =
"",
197 const KeyFormatter& formatter = DefaultKeyFormatter)
const override;
203 using GaussianFactor::error;
217 Matrix augmentedInformation()
const override;
222 Matrix information()
const override;
225 using Base::hessianDiagonal;
228 void hessianDiagonalAdd(
VectorValues& d)
const override;
231 void hessianDiagonal(
double* d)
const override;
234 std::map<Key,Matrix> hessianBlockDiagonal()
const override;
239 std::pair<Matrix, Vector> jacobian()
const override;
244 std::pair<Matrix, Vector> jacobianUnweighted()
const;
249 Matrix augmentedJacobian()
const override;
254 Matrix augmentedJacobianUnweighted()
const;
271 return model_ && model_->isConstrained();
278 return Ab_(variable - begin()).
cols();
292 const SharedDiagonal&
get_model()
const {
return model_; }
298 const constBVector
getb()
const {
return Ab_(size()).col(0); }
304 constABlock
getA()
const {
return Ab_.
range(0, size()); }
307 BVector
getb() {
return Ab_(size()).col(0); }
327 void transposeMultiplyAdd(
double alpha,
const Vector& e,
331 void multiplyHessianAdd(
double alpha,
const VectorValues& x,
342 void multiplyHessianAdd(
double alpha,
const double* x,
double* y,
343 const std::vector<size_t>& accumulatedDims)
const;
349 void gradientAtZero(
double* d)
const override;
358 std::pair<std::shared_ptr<GaussianConditional>, shared_ptr>
362 void setModel(
bool anyConstrained,
const Vector& sigmas);
375 friend GTSAM_EXPORT std::pair<std::shared_ptr<GaussianConditional>, shared_ptr>
385 std::shared_ptr<GaussianConditional> splitConditional(
size_t nrFrontals);
390 template<
typename TERMS>
391 void fillTerms(
const TERMS& terms,
const Vector& b,
const SharedDiagonal& noiseModel);
399 void JacobianFactorHelper(
409 template<
class KEYS,
class DIMENSIONS>
411 const SharedDiagonal& model = SharedDiagonal()) :
412 Base(keys), Ab_(dims.begin(), dims.end(), m,
true), model_(model) {
418 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION 420 friend class boost::serialization::access;
421 template<
class ARCHIVE>
422 void save(ARCHIVE & ar,
const unsigned int version)
const {
427 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
428 ar << BOOST_SERIALIZATION_NVP(Ab_);
429 bool model_null =
false;
430 if(model_.get() ==
nullptr) {
432 ar << boost::serialization::make_nvp(
"model_null", model_null);
434 ar << boost::serialization::make_nvp(
"model_null", model_null);
435 ar << BOOST_SERIALIZATION_NVP(model_);
439 template<
class ARCHIVE>
440 void load(ARCHIVE & ar,
const unsigned int version) {
442 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
443 ar >> BOOST_SERIALIZATION_NVP(Ab_);
445 ar >> BOOST_SERIALIZATION_NVP(model_);
448 ar >> BOOST_SERIALIZATION_NVP(model_null);
450 ar >> BOOST_SERIALIZATION_NVP(model_);
455 BOOST_SERIALIZATION_SPLIT_MEMBER()
465 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION 469 #include <gtsam/linear/JacobianFactor-inl.h> DenseIndex cols() const
Column size.
Definition: VerticalBlockMatrix.h:118
const VerticalBlockMatrix & matrixObject() const
Definition: JacobianFactor.h:257
Definition: VerticalBlockMatrix.h:42
DenseIndex rows() const
Row size.
Definition: VerticalBlockMatrix.h:115
Definition: Testable.h:152
A matrix with column blocks of pre-defined sizes. Used in JacobianFactor and GaussianConditional.
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
Definition: FastVector.h:34
A factor with a quadratic error function - a Gaussian.
Definition: Ordering.h:37
ABlock getA()
Definition: JacobianFactor.h:313
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:52
JacobianFactor(const JacobianFactor &jf)
Definition: JacobianFactor.h:115
SharedDiagonal & get_model()
Definition: JacobianFactor.h:295
Definition: VectorValues.h:74
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:108
Included from all GTSAM files.
Definition: GaussianFactor.h:38
VariableSlots describes the structure of a combined factor in terms of where each block comes from in...
Definition: SymmetricBlockMatrix.h:53
bool isConstrained() const
Definition: JacobianFactor.h:270
GTSAM_EXPORT std::pair< std::shared_ptr< GaussianConditional >, std::shared_ptr< JacobianFactor > > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
size_t rows() const
Definition: JacobianFactor.h:284
Definition: Testable.h:112
Definition: VariableSlots.h:51
GaussianFactor::shared_ptr clone() const override
Definition: JacobianFactor.h:190
GTSAM_EXPORT void print(const Matrix &A, const std::string &s, std::ostream &stream)
const constBVector getb() const
Definition: JacobianFactor.h:298
KeyVector::iterator iterator
Iterator over keys.
Definition: Factor.h:79
GTSAM_EXPORT void save(const Matrix &A, const std::string &s, const std::string &filename)
DenseIndex getDim(const_iterator variable) const override
Definition: JacobianFactor.h:277
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: JacobianFactor.h:97
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
Definition: JacobianFactor.h:91
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianFactor.h:42
ABlock getA(iterator variable)
Definition: JacobianFactor.h:310
Block range(DenseIndex startBlock, DenseIndex endBlock)
Definition: VerticalBlockMatrix.h:130
VerticalBlockMatrix & matrixObject()
Definition: JacobianFactor.h:260
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
constABlock getA() const
Definition: JacobianFactor.h:304
size_t cols() const
Definition: JacobianFactor.h:289
JacobianFactor This
Typedef to this class.
Definition: JacobianFactor.h:95
A Gaussian factor using the canonical parameters (information form)
Definition: HessianFactor.h:100
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:82
Definition: Expression.h:36
~JacobianFactor() override
Definition: JacobianFactor.h:187
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102
GaussianFactor Base
Typedef to base class.
Definition: JacobianFactor.h:96
Definition: GaussianFactorGraph.h:73
const SharedDiagonal & get_model() const
Definition: JacobianFactor.h:292
constABlock getA(const_iterator variable) const
Definition: JacobianFactor.h:301
BVector getb()
Definition: JacobianFactor.h:307