41 double delta = 1e-5) {
43 std::vector<std::pair<Key, Matrix> > jacobians;
47 const size_t rows = e.size();
50 const double one_over_2delta = 1.0 / (2.0 * delta);
51 for (
Key key : factor) {
54 const size_t cols = dX.
dim(key);
55 Matrix J = Matrix::Zero(rows, cols);
56 for (
size_t col = 0; col < cols; ++col) {
57 Vector dx = Vector::Zero(cols);
61 const Vector left = factor.whitenedError(eval_values);
64 eval_values = values.
retract(dX);
65 const Vector right = factor.whitenedError(eval_values);
66 J.col(col) = (left - right) * one_over_2delta;
68 jacobians.emplace_back(key, J);
77 inline bool testFactorJacobians(
const std::string& name_,
87 if (!actual)
return false;
94 for (
size_t i = 0; i < actual->size(); i++) {
97 (Matrix)(actual->getA(actual->begin() + i)), tolerance);
99 std::cout <<
"Mismatch in Jacobian " << i + 1
100 <<
" (base 1), as shown above" << std::endl;
114 #define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance) \ 115 { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); } Some functions to compute numerical derivatives.
Values retract(const VectorValues &delta) const
Definition: VectorValues.h:74
VectorValues zeroVectors() const
Definition: NonlinearFactor.h:197
JacobianFactor linearizeNumerically(const NoiseModelFactor &factor, const Values &values, double delta=1e-5)
Definition: factorTesting.h:39
size_t dim(Key j) const
Definition: VectorValues.h:130
Definition: JacobianFactor.h:91
Definition: chartTesting.h:28
GTSAM_EXPORT bool assert_equal(const Matrix &A, const Matrix &B, double tol=1e-9)
Non-linear factor base classes.
const_iterator begin() const
Definition: Factor.h:145
bool equal(const T &obj1, const T &obj2, double tol)
Definition: Testable.h:85
Vector whitenedError(const Values &c) const
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102
std::shared_ptr< GaussianFactor > linearize(const Values &x) const override
constABlock getA(const_iterator variable) const
Definition: JacobianFactor.h:301