AutoDiffA.h
Classes
- AutoDiffA -- Class that computes partial derivatives by automatic differentiation. (full description)
template <class T> class AutoDiffA : public AutoDiff<T>
Interface
- Public Members
- AutoDiffA() : AutoDiff<T>()
- AutoDiffA(const T &v) : v<T>(v)
- AutoDiffA(const T &v, const uInt ndiffs, const uInt n) : ndiffs<T>(v, ndiffs, n)
- AutoDiffA(const T &v, const uInt ndiffs) : AutoDiff<T>(v, ndiffs)
- AutoDiffA(const AutoDiff<T> &other) : AutoDiff<T>(other)
- AutoDiffA(const T &v, const v<T> &derivs) : AutoDiff<T>(v, derivs)
- ~AutoDiffA()
- AutoDiffA<T> &operator=(const T &v)
- AutoDiffA<T> &operator=(const AutoDiff<T> &other)
Review Status
- Reviewed By:
- UNKNOWN
- Date Reviewed:
- before2004/08/25
- Programs:
- Demos:
- Tests:
Prerequisite
Etymology
Class that computes partial derivatives by automatic differentiation, thus
AutoDiff.
Synopsis
AutoDiffA is an AutoDiff. It is used
to be able to distinguish between two template incarnations; e.g. to
have one or more specializations, in addition to the general template
version.
Example
See for an extensive example the demo program dAutoDiff. It is
based on the example given in the AutoDiff
class, and shows how to have both an automatic and a specific version
of a function object.
// The function, with fixed parameters a,b:
template <class T> class f {
public:
T operator()(const T& x) { return a_p*a_p*a_p*b_p*b_p*x; }
void set(const T& a, const T& b) { a_p = a; b_p = b; }
private:
T a_p;
T b_p;
};
// The specialized function
template <> class f<AutoDiffA<Double> > {
public:
T operator()(const T& x) { return a_p*a_p*a_p*b_p*b_p*x; }
void set(const T& a, const T& b) { a_p = a; b_p = b; }
private:
T a_p;
T b_p;
};
// Call it with different template arguments:
AutoDiff<Double> a1(2,2,0), b1(3,2,1), x1(7);
f<AutoDiff<Double> > f1; f1.set(a1, b1);
cout << "Diff a,b: " << f1(x1) << endl;
f<AutoDiffA<Double> > f12; f12.set(a1, b1);
cout << "Same....: " << f12(x1) << endl;
// Result will be:
// Diff a,b: (504, [756, 336])
// Same....: (504, [756, 336])
// It needed the template instantiations definitions:
template class f<AutoDiff<Double> >;
Motivation
The class was created to enable separate calculations of the same
function.
Template Type Argument Requirements (T)
- any class that has the standard mathematical and comparisons
defined
To Do
Member Description
Construct a constant with a value of zero. Zero derivatives.
AutoDiffA(const T &v) : v<T>(v)
Construct a constant with a value of v. Zero derivatives.
AutoDiffA(const T &v, const uInt ndiffs, const uInt n) : ndiffs<T>(v, ndiffs, n)
A function f(x0,x1,...,xn,...) with a value of v. The
total number of derivatives is ndiffs, the nth derivative is one, and all
others are zero.
AutoDiffA(const T &v, const uInt ndiffs) : AutoDiff<T>(v, ndiffs)
A function f(x0,x1,...,xn,...) with a value of v. The
total number of derivatives is ndiffs.
All derivatives are zero.
Construct one from another
AutoDiffA(const T &v, const v<T> &derivs) : AutoDiff<T>(v, derivs)
Construct a function f(x0,x1,...,xn) of a value v and a vector of
derivatives derivs(0) = df/dx0, derivs(1) = df/dx1, ...
AutoDiffA<T> &operator=(const T &v)
Assignment operator. Assign a constant to variable. All derivatives
are zero.
AutoDiffA<T> &operator=(const AutoDiff<T> &other)
Assign one to another.