From f8468bd59624906e4982c11c253b4f365f1ae395 Mon Sep 17 00:00:00 2001 From: dellaert Date: Fri, 10 Oct 2014 12:31:40 +0200 Subject: [PATCH] Recursion done --- gtsam_unstable/nonlinear/Expression-inl.h | 9 ++++++--- gtsam_unstable/nonlinear/tests/testExpressionFactor.cpp | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gtsam_unstable/nonlinear/Expression-inl.h b/gtsam_unstable/nonlinear/Expression-inl.h index 53f531149..8b98b3b94 100644 --- a/gtsam_unstable/nonlinear/Expression-inl.h +++ b/gtsam_unstable/nonlinear/Expression-inl.h @@ -120,10 +120,13 @@ struct JacobianTrace { /// Make sure destructor is virtual virtual ~JacobianTrace() { } - virtual void startReverseAD(JacobianMap& jacobians) const = 0; - virtual void reverseAD(const Matrix& dFdT, JacobianMap& jacobians) const = 0; + virtual void startReverseAD(JacobianMap& jacobians) const { + } + virtual void reverseAD(const Matrix& dFdT, JacobianMap& jacobians) const { + } virtual void reverseAD2(const Jacobian2T& dFdT, - JacobianMap& jacobians) const = 0; + JacobianMap& jacobians) const { + } }; /// Primary template calls the generic Matrix reverseAD pipeline diff --git a/gtsam_unstable/nonlinear/tests/testExpressionFactor.cpp b/gtsam_unstable/nonlinear/tests/testExpressionFactor.cpp index d3f80d2a6..e5e5e41e6 100644 --- a/gtsam_unstable/nonlinear/tests/testExpressionFactor.cpp +++ b/gtsam_unstable/nonlinear/tests/testExpressionFactor.cpp @@ -339,15 +339,18 @@ struct Trace: More { /// Start the reverse AD process virtual void startReverseAD(JacobianMap& jacobians) const { + More::startReverseAD(jacobians); Select::reverseAD(trace, dTdA, jacobians); } /// Given df/dT, multiply in dT/dA and continue reverse AD process virtual void reverseAD(const Matrix& dFdT, JacobianMap& jacobians) const { + More::reverseAD(dFdT, jacobians); trace.reverseAD(dFdT * dTdA, jacobians); } /// Version specialized to 2-dimensional output virtual void reverseAD2(const Jacobian2T& dFdT, JacobianMap& jacobians) const { + More::reverseAD2(dFdT, jacobians); trace.reverseAD2(dFdT * dTdA, jacobians); } };