Re-factor, allow traceExecution

release/4.3a0
dellaert 2014-10-11 11:29:42 +02:00
parent 1f692638f5
commit 05f78b6dca
1 changed files with 21 additions and 6 deletions

View File

@ -113,18 +113,33 @@ public:
return root_->value(values);
}
/// Return value and derivatives
Augmented<T> augmented(const Values& values) const {
#define REVERSE_AD
#ifdef REVERSE_AD
/// Return value and derivatives, forward AD version
Augmented<T> forward(const Values& values) const {
return root_->forward(values);
}
/// trace execution, very unsafe, for testing purposes only
T traceExecution(const Values& values, ExecutionTrace<T>& trace,
void* raw) const {
return root_->traceExecution(values, trace, raw);
}
/// Return value and derivatives, reverse AD version
Augmented<T> reverse(const Values& values) const {
char raw[10];
ExecutionTrace<T> trace;
T value(root_->traceExecution(values, trace, raw));
Augmented<T> augmented(value);
trace.startReverseAD(augmented.jacobians());
return augmented;
}
/// Return value and derivatives
Augmented<T> augmented(const Values& values) const {
#ifdef EXPRESSION_FORWARD_AD
return forward(values);
#else
return root_->forward(values);
return reverse(values);
#endif
}