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

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

#include <SparseDiffX.h>

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

Public Member Functions

 SparseDiffX ()
 Construct a constant with a value of zero. More...
 
 SparseDiffX (const T &v)
 Construct a constant with a value of v. More...
 
 SparseDiffX (const T &v, const uInt n)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 SparseDiffX (const T &v, const uInt n, const T &der)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 SparseDiffX (const SparseDiff< T > &other)
 Construct one from another. More...
 
 ~SparseDiffX ()
 
SparseDiffX< T > & operator= (const T &v)
 Assignment operator. More...
 
SparseDiffX< T > & operator= (const pair< uInt, T > &der)
 Assignment operator. More...
 
SparseDiffX< T > & operator= (const vector< pair< uInt, T > > &der)
 Assignment operator. More...
 
SparseDiffX< 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::SparseDiffX< 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

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.

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

Motivation

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

Template Type Argument Requirements (T)

To Do

Definition at line 121 of file SparseDiffX.h.

Constructor & Destructor Documentation

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

Construct a constant with a value of zero.

Zero derivatives.

Definition at line 125 of file SparseDiffX.h.

template<class T >
casacore::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.

template<class T >
casacore::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.

template<class T >
casacore::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.

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

Construct one from another.

Definition at line 141 of file SparseDiffX.h.

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

Definition at line 143 of file SparseDiffX.h.

Member Function Documentation

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

Assignment operator.

Assign a constant to variable. All derivatives are zero.

Definition at line 147 of file SparseDiffX.h.

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

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

Assignment operator.

Add a gradient to variable.

Definition at line 153 of file SparseDiffX.h.

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

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

Assignment operator.

Assign gradients to variable.

Definition at line 159 of file SparseDiffX.h.

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

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

Assign one to another (deep copy).

Definition at line 166 of file SparseDiffX.h.

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


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