casa  5.7.0-16
casacore::SparseDiffA< T > Class Template Reference

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

`#include <SparseDiffA.h>`

Inheritance diagram for casacore::SparseDiffA< 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

Bool isConstant () const
Is it a constant, i.e., with zero derivatives? More...

void sort ()
Sort derivative list; cater for doubles and zeroes. More...

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.

Public interface

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

### 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)

• any class that has the standard mathematical and comparisons defined

### To Do

• Nothing I know

Definition at line 121 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 125 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 128 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 132 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 137 of file SparseDiffA.h.

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

Construct one from another.

Definition at line 141 of file SparseDiffA.h.

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

Definition at line 143 of file SparseDiffA.h.

## Member Function Documentation

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

Assignment operator.

Assign a constant to variable. All derivatives are zero.

Definition at line 147 of file SparseDiffA.h.

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

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

Assignment operator.

Definition at line 153 of file SparseDiffA.h.

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

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

Assignment operator.

Definition at line 159 of file SparseDiffA.h.

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

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

Assign one to another (deep copy).

Definition at line 165 of file SparseDiffA.h.

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

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