GaussianConditional.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
18 // \callgraph
19 
20 #pragma once
21 
22 #include <gtsam/global_includes.h>
27 
28 #include <random> // for std::mt19937_64
29 
30 namespace gtsam {
31 
40  class GTSAM_EXPORT GaussianConditional :
41  public JacobianFactor,
42  public Conditional<JacobianFactor, GaussianConditional>
43  {
44  public:
46  typedef std::shared_ptr<This> shared_ptr;
49 
52 
55 
57  GaussianConditional(Key key, const Vector& d, const Matrix& R,
59 
61  GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
62  const Matrix& S,
64 
66  GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
67  const Matrix& S, Key parent2, const Matrix& T,
69 
73  template<typename TERMS>
74  GaussianConditional(const TERMS& terms,
75  size_t nrFrontals, const Vector& d,
77 
88  template <typename KEYS>
89  GaussianConditional(const KEYS& keys, size_t nrFrontals,
90  const VerticalBlockMatrix& augmentedMatrix,
92 
103  template <typename KEYS>
104  GaussianConditional(const KEYS& keys, size_t nrFrontals,
105  VerticalBlockMatrix&& augmentedMatrix,
107 
109  static GaussianConditional FromMeanAndStddev(Key key, const Vector& mu,
110  double sigma);
111 
113  static GaussianConditional FromMeanAndStddev(Key key, const Matrix& A,
114  Key parent, const Vector& b,
115  double sigma);
116 
119  static GaussianConditional FromMeanAndStddev(Key key, //
120  const Matrix& A1, Key parent1,
121  const Matrix& A2, Key parent2,
122  const Vector& b, double sigma);
123 
125  template<typename... Args>
126  static shared_ptr sharedMeanAndStddev(Args&&... args) {
127  return std::make_shared<This>(FromMeanAndStddev(std::forward<Args>(args)...));
128  }
129 
137  template<typename ITERATOR>
138  static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional);
139 
143 
145  void print(
146  const std::string& = "GaussianConditional",
147  const KeyFormatter& formatter = DefaultKeyFormatter) const override;
148 
150  bool equals(const GaussianFactor&cg, double tol = 1e-9) const override;
151 
155 
164  double negLogConstant() const override;
165 
173  double logProbability(const VectorValues& x) const;
174 
180  double evaluate(const VectorValues& x) const;
181 
183  double operator()(const VectorValues& x) const {
184  return evaluate(x);
185  }
186 
200  VectorValues solve(const VectorValues& parents) const;
201 
202  VectorValues solveOtherRHS(const VectorValues& parents, const VectorValues& rhs) const;
203 
205  void solveTransposeInPlace(VectorValues& gy) const;
206 
208  JacobianFactor::shared_ptr likelihood(
209  const VectorValues& frontalValues) const;
210 
212  JacobianFactor::shared_ptr likelihood(const Vector& frontal) const;
213 
220  VectorValues sample(std::mt19937_64* rng) const;
221 
229  VectorValues sample(const VectorValues& parentsValues,
230  std::mt19937_64* rng) const;
231 
233  VectorValues sample() const;
234 
236  VectorValues sample(const VectorValues& parentsValues) const;
237 
241 
243  constABlock R() const { return Ab_.range(0, nrFrontals()); }
244 
246  constABlock S() const { return Ab_.range(nrFrontals(), size()); }
247 
249  constABlock S(const_iterator it) const { return BaseFactor::getA(it); }
250 
252  const constBVector d() const { return BaseFactor::getb(); }
253 
265  inline double determinant() const { return exp(logDeterminant()); }
266 
278  double logDeterminant() const;
279 
283 
288  double logProbability(const HybridValues& x) const override;
289 
294  double evaluate(const HybridValues& x) const override;
295 
296  using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
297  using JacobianFactor::error; // Expose error(const HybridValues&) method..
298 
300 
301  private:
302 #if GTSAM_ENABLE_BOOST_SERIALIZATION
303 
304  friend class boost::serialization::access;
305  template<class Archive>
306  void serialize(Archive & ar, const unsigned int /*version*/) {
307  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
308  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
309  }
310 #endif
311  }; // GaussianConditional
312 
314 template<>
315 struct traits<GaussianConditional> : public Testable<GaussianConditional> {};
316 
317 } // \ namespace gtsam
318 
320 
gtsam::HybridValues
Definition: HybridValues.h:37
rng
static std::mt19937 rng
Definition: timeFactorOverhead.cpp:31
gtsam::GaussianConditional::S
constABlock S() const
Definition: GaussianConditional.h:246
Eigen::Block
Expression of a fixed-size or dynamic-size block.
Definition: Block.h:103
gtsam::GaussianConditional::BaseFactor
JacobianFactor BaseFactor
Typedef to our factor base class.
Definition: GaussianConditional.h:47
global_includes.h
Included from all GTSAM files.
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
d
static const double d[K][N]
Definition: igam.h:11
test_constructor::sigmas
Vector1 sigmas
Definition: testHybridNonlinearFactor.cpp:52
keys
const KeyVector keys
Definition: testRegularImplicitSchurFactor.cpp:40
mu
double mu
Definition: testBoundingConstraint.cpp:37
x
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition: gnuplot_common_settings.hh:12
gtsam::JacobianFactor
Definition: JacobianFactor.h:91
gtsam::GaussianFactor
Definition: GaussianFactor.h:38
gtsam::GaussianConditional::operator()
double operator()(const VectorValues &x) const
Evaluate probability density, sugar.
Definition: GaussianConditional.h:183
formatter
const KeyFormatter & formatter
Definition: treeTraversal-inst.h:204
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
exp
const EIGEN_DEVICE_FUNC ExpReturnType exp() const
Definition: ArrayCwiseUnaryOps.h:97
gtsam::Factor::shared_ptr
std::shared_ptr< Factor > shared_ptr
A shared_ptr to this class.
Definition: Factor.h:76
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:39
GaussianConditional-inl.h
Conditional Gaussian Base class.
sampling::sigma
static const double sigma
Definition: testGaussianBayesNet.cpp:170
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
size
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
gtsam::GaussianConditional::BaseConditional
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition: GaussianConditional.h:48
gtsam::GaussianConditional::R
constABlock R() const
Definition: GaussianConditional.h:243
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:145
A
Definition: test_numpy_dtypes.cpp:300
gtsam::VerticalBlockMatrix
Definition: VerticalBlockMatrix.h:44
gtsam::VectorValues
Definition: VectorValues.h:74
gtsam::KeyFormatter
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
gtsam::internal::logDeterminant
double logDeterminant(const typename BAYESTREE::sharedClique &clique)
Definition: GaussianBayesTree-inl.h:42
gtsam::GaussianConditional
Definition: GaussianConditional.h:40
gtsam::SharedDiagonal
noiseModel::Diagonal::shared_ptr SharedDiagonal
Definition: NoiseModel.h:764
A2
static const double A2[]
Definition: expn.h:7
gtsam::GaussianConditional::This
GaussianConditional This
Typedef to this class.
Definition: GaussianConditional.h:45
gtsam::GaussianConditional::d
const constBVector d() const
Definition: GaussianConditional.h:252
gtsam::GaussianConditional::GaussianConditional
GaussianConditional()
Definition: GaussianConditional.h:54
VectorValues.h
Factor Graph Values.
Eigen::Triplet
A small structure to hold a non zero as a triplet (i,j,value).
Definition: SparseUtil.h:162
gtsam::Conditional
Definition: Conditional.h:63
gtsam::equals
Definition: Testable.h:112
key
const gtsam::Symbol key('X', 0)
JacobianFactor.h
gtsam::b
const G & b
Definition: Group.h:79
gtsam::Factor::const_iterator
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:83
gtsam::JacobianFactor::constBVector
constABlock::ConstColXpr constBVector
Definition: JacobianFactor.h:102
gtsam
traits
Definition: SFMdata.h:40
gtsam::Testable
Definition: Testable.h:152
gtsam::traits
Definition: Group.h:36
gtsam::GaussianConditional::S
constABlock S(const_iterator it) const
Definition: GaussianConditional.h:249
args
Definition: pytypes.h:2212
Combine
Definition: testExpressionFactor.cpp:476
A1
static const double A1[]
Definition: expn.h:6
gtsam::GaussianConditional::shared_ptr
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianConditional.h:46
gtsam::JacobianFactor::error
double error(const VectorValues &c) const override
Definition: JacobianFactor.cpp:509
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam::JacobianFactor::shared_ptr
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: JacobianFactor.h:97
Conditional.h
Base class for conditional densities.
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
R
Rot2 R(Rot2::fromAngle(0.1))
Conditional-inst.h
S
DiscreteKey S(1, 2)
gtsam::GaussianConditional::determinant
double determinant() const
Compute the determinant of the R matrix.
Definition: GaussianConditional.h:265
gtsam::GaussianConditional::sharedMeanAndStddev
static shared_ptr sharedMeanAndStddev(Args &&... args)
Create shared pointer by forwarding arguments to fromMeanAndStddev.
Definition: GaussianConditional.h:126


gtsam
Author(s):
autogenerated on Wed Mar 19 2025 03:01:41