casa
$Rev:20696$
|
Class that computes partial derivatives by automatic differentiation. More...
#include <SparseDiffX.h>
Public Member Functions | |
SparseDiffX () | |
Construct a constant with a value of zero. | |
SparseDiffX (const T &v) | |
Construct a constant with a value of v. | |
SparseDiffX (const T &v, const uInt n) | |
A function f(x0,x1,...,xn,...) with a value of v. | |
SparseDiffX (const T &v, const uInt n, const T &der) | |
A function f(x0,x1,...,xn,...) with a value of v. | |
SparseDiffX (const SparseDiff< T > &other) | |
Construct one from another. | |
~SparseDiffX () | |
SparseDiffX< T > & | operator= (const T &v) |
Assignment operator. | |
SparseDiffX< T > & | operator= (const pair< uInt, T > &der) |
Assignment operator. | |
SparseDiffX< T > & | operator= (const vector< pair< uInt, T > > &der) |
Assignment operator. | |
SparseDiffX< T > & | operator= (const SparseDiff< T > &other) |
Assign one to another (deep copy). |
Class that computes partial derivatives by automatic differentiation.
Public interface
Class that computes partial derivatives by automatic differentiation, thus SparseDiff.
SparseDiffX is an SparseDiff . 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.
See for an extensive example the demo program dSparseDiff. It is based on the example given in the SparseDiff 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<SparseDiffX<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: SparseDiff<Double> a1(2,0), b1(3,1), x1(7); f<SparseDiff<Double> > f1; f1.set(a1, b1); cout << "Diff a,b: " << f1(x1) << endl; f<SparseDiffX<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<SparseDiff<Double> >;
The class was created to enable separate calculations of the same function.
Definition at line 121 of file SparseDiffX.h.
casa::SparseDiffX< T >::SparseDiffX | ( | ) | [inline] |
Construct a constant with a value of zero.
Zero derivatives.
Definition at line 125 of file SparseDiffX.h.
casa::SparseDiffX< T >::SparseDiffX | ( | const T & | v | ) | [inline] |
Construct a constant with a value of v.
Zero derivatives.
Definition at line 128 of file SparseDiffX.h.
casa::SparseDiffX< T >::SparseDiffX | ( | const T & | v, |
const uInt | n | ||
) | [inline] |
A function f(x0,x1,...,xn,...) with a value of v.
The nth derivative is one, and all others are zero.
Definition at line 132 of file SparseDiffX.h.
casa::SparseDiffX< T >::SparseDiffX | ( | const T & | v, |
const uInt | n, | ||
const T & | der | ||
) | [inline] |
A function f(x0,x1,...,xn,...) with a value of v.
The nth derivative is der, and all other derivatives are zero.
Definition at line 137 of file SparseDiffX.h.
casa::SparseDiffX< T >::SparseDiffX | ( | const SparseDiff< T > & | other | ) | [inline] |
Construct one from another.
Definition at line 141 of file SparseDiffX.h.
casa::SparseDiffX< T >::~SparseDiffX | ( | ) | [inline] |
Definition at line 143 of file SparseDiffX.h.
SparseDiffX<T>& casa::SparseDiffX< T >::operator= | ( | const T & | v | ) | [inline] |
Assignment operator.
Assign a constant to variable. All derivatives are zero.
Reimplemented from casa::SparseDiff< T >.
Definition at line 147 of file SparseDiffX.h.
Referenced by casa::SparseDiffX< T >::operator=().
SparseDiffX<T>& casa::SparseDiffX< T >::operator= | ( | const pair< uInt, T > & | der | ) | [inline] |
Assignment operator.
Add a gradient to variable.
Reimplemented from casa::SparseDiff< T >.
Definition at line 153 of file SparseDiffX.h.
References casa::SparseDiffX< T >::operator=().
SparseDiffX<T>& casa::SparseDiffX< T >::operator= | ( | const vector< pair< uInt, T > > & | der | ) | [inline] |
Assignment operator.
Assign gradients to variable.
Reimplemented from casa::SparseDiff< T >.
Definition at line 159 of file SparseDiffX.h.
References casa::SparseDiffX< T >::operator=().
SparseDiffX<T>& casa::SparseDiffX< T >::operator= | ( | const SparseDiff< T > & | other | ) | [inline] |
Assign one to another (deep copy).
Reimplemented from casa::SparseDiff< T >.
Definition at line 166 of file SparseDiffX.h.
References casa::SparseDiffX< T >::operator=().