casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | List of all members
casacore::SparseDiffA< T > Class Template Reference

Class that computes partial derivatives by automatic differentiation. More...

#include <SparseDiffA.h>

Inheritance diagram for casacore::SparseDiffA< T >:
casacore::SparseDiff< T >

Public Member Functions

 SparseDiffA ()
 Construct a constant with a value of zero. More...
 
 SparseDiffA (const T &v)
 Construct a constant with a value of v. More...
 
 SparseDiffA (const T &v, const uInt n)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 SparseDiffA (const T &v, const uInt n, const T &der)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 SparseDiffA (const SparseDiff< T > &other)
 Construct one from another. More...
 
 ~SparseDiffA ()
 
SparseDiffA< T > & operator= (const T &v)
 Assignment operator. More...
 
SparseDiffA< T > & operator= (const pair< uInt, T > &der)
 Assignment operator. More...
 
SparseDiffA< T > & operator= (const vector< pair< uInt, T > > &der)
 Assignment operator. More...
 
SparseDiffA< T > & operator= (const SparseDiff< T > &other)
 Assign one to another (deep copy). More...
 
- Public Member Functions inherited from casacore::SparseDiff< T >
 SparseDiff ()
 Construct a constant with a value of zero. More...
 
 SparseDiff (const T &v)
 Construct a constant with a value of v. More...
 
 SparseDiff (const T &v, const uInt n)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 SparseDiff (const T &v, const uInt n, const T &der)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 SparseDiff (const AutoDiff< T > &other)
 Construct from an AutoDiff. More...
 
 SparseDiff (const SparseDiff< T > &other)
 Construct one from another (deep copy) More...
 
 ~SparseDiff ()
 Destructor. More...
 
SparseDiff< T > & operator= (const T &v)
 Assignment operator. More...
 
SparseDiff< T > & operator= (const pair< uInt, T > &der)
 Assignment operator. More...
 
SparseDiff< T > & operator= (const vector< pair< uInt, T > > &der)
 Assignment operator. More...
 
SparseDiff< T > & operator= (const AutoDiff< T > &other)
 Assign from an Autodiff. More...
 
SparseDiff< T > & operator= (const SparseDiff< T > &other)
 Assign one to another (deep copy) More...
 
void operator*= (const SparseDiff< T > &other)
 Assignment operators. More...
 
void operator/= (const SparseDiff< T > &other)
 
void operator+= (const SparseDiff< T > &other)
 
void operator-= (const SparseDiff< T > &other)
 
void operator*= (const T other)
 
void operator/= (const T other)
 
void operator+= (const T other)
 
void operator-= (const T other)
 
AutoDiff< T > toAutoDiff (uInt n) const
 Convert to an AutoDiff of length n More...
 
SparseDiffRep< T > * theRep ()
 Returns the pointer to the structure of value and derivatives. More...
 
const SparseDiffRep< T > * theRep () const
 
T & value ()
 Returns the value of the function. More...
 
const T & value () const
 
vector< pair< uInt, T > > & derivatives () const
 Returns a vector of the derivatives of a SparseDiff. More...
 
void derivatives (vector< pair< uInt, T > > &res) const
 
const vector< pair< uInt, T > > & grad () const
 
vector< pair< uInt, T > > & grad ()
 
pair< uInt, T > & derivative (uInt which)
 Returns a specific derivative. More...
 
const pair< uInt, T > & derivative (uInt which) const
 
uInt nDerivatives () const
 Return total number of derivatives. More...
 
Bool isConstant () const
 Is it a constant, i.e., with zero derivatives? More...
 
void sort ()
 Sort derivative list; cater for doubles and zeroes. More...
 

Additional Inherited Members

- Public Types inherited from casacore::SparseDiff< T >
typedef T value_type
 
typedef value_typereference
 
typedef const value_typeconst_reference
 
typedef value_typeiterator
 
typedef const value_typeconst_iterator
 
- Static Public Member Functions inherited from casacore::SparseDiff< T >
static Bool ltSort (pair< uInt, T > &lhs, pair< uInt, T > &rhs)
 Sort criterium. More...
 

Detailed Description

template<class T>
class casacore::SparseDiffA< T >

Class that computes partial derivatives by automatic differentiation.

Intended use:

Public interface

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tSparseDiff
Demo programs:
dSparseDiff

Prerequisite

Etymology

Class that computes partial derivatives by automatic differentiation, thus SparseDiff.

Synopsis

SparseDiffA 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.

Example

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<SparseDiffA<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<SparseDiffA<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> >;

Motivation

The class was created to enable separate calculations of the same function.

Template Type Argument Requirements (T)

To Do

Definition at line 119 of file SparseDiffA.h.

Constructor & Destructor Documentation

template<class T >
casacore::SparseDiffA< T >::SparseDiffA ( )
inline

Construct a constant with a value of zero.

Zero derivatives.

Definition at line 123 of file SparseDiffA.h.

template<class T >
casacore::SparseDiffA< T >::SparseDiffA ( const T &  v)
inline

Construct a constant with a value of v.

Zero derivatives.

Definition at line 126 of file SparseDiffA.h.

template<class T >
casacore::SparseDiffA< T >::SparseDiffA ( 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 130 of file SparseDiffA.h.

template<class T >
casacore::SparseDiffA< T >::SparseDiffA ( 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 135 of file SparseDiffA.h.

template<class T >
casacore::SparseDiffA< T >::SparseDiffA ( const SparseDiff< T > &  other)
inline

Construct one from another.

Definition at line 139 of file SparseDiffA.h.

template<class T >
casacore::SparseDiffA< T >::~SparseDiffA ( )
inline

Definition at line 141 of file SparseDiffA.h.

Member Function Documentation

template<class T >
SparseDiffA<T>& casacore::SparseDiffA< T >::operator= ( const T &  v)
inline

Assignment operator.

Assign a constant to variable. All derivatives are zero.

Definition at line 145 of file SparseDiffA.h.

References casacore::SparseDiff< T >::operator=().

template<class T >
SparseDiffA<T>& casacore::SparseDiffA< T >::operator= ( const pair< uInt, T > &  der)
inline

Assignment operator.

Add a gradient to variable.

Definition at line 151 of file SparseDiffA.h.

References casacore::SparseDiff< T >::operator=().

template<class T >
SparseDiffA<T>& casacore::SparseDiffA< T >::operator= ( const vector< pair< uInt, T > > &  der)
inline

Assignment operator.

Assign gradients to variable.

Definition at line 157 of file SparseDiffA.h.

References casacore::SparseDiff< T >::operator=().

template<class T >
SparseDiffA<T>& casacore::SparseDiffA< T >::operator= ( const SparseDiff< T > &  other)
inline

Assign one to another (deep copy).

Definition at line 163 of file SparseDiffA.h.

References casacore::SparseDiff< T >::operator=().


The documentation for this class was generated from the following file: