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

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

#include <AutoDiffA.h>

Inheritance diagram for casacore::AutoDiffA< T >:

## Public Member Functions

AutoDiffA ()
Construct a constant with a value of zero. More...

AutoDiffA (const T &v)
Construct a constant with a value of v. More...

AutoDiffA (const T &v, const uInt ndiffs, const uInt n)
A function f(x0,x1,...,xn,...) with a value of v. More...

AutoDiffA (const T &v, const uInt ndiffs)
A function f(x0,x1,...,xn,...) with a value of v. More...

AutoDiffA (const AutoDiff< T > &other)
Construct one from another. More...

AutoDiffA (const T &v, const Vector< T > &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,... More...

~AutoDiffA ()

AutoDiffA< T > & operator= (const T &v)
Assignment operator. More...

AutoDiffA< T > & operator= (const AutoDiff< T > &other)
Assign one to another. More...

Public Member Functions inherited from casacore::AutoDiff< T >
AutoDiff ()
Construct a constant with a value of zero. More...

AutoDiff (const T &v)
Construct a constant with a value of v. More...

AutoDiff (const T &v, const uInt ndiffs, const uInt n)
A function f(x0,x1,...,xn,...) with a value of v. More...

AutoDiff (const T &v, const uInt ndiffs)
A function f(x0,x1,...,xn,...) with a value of v. More...

AutoDiff (const AutoDiff< T > &other)
Construct one from another. More...

AutoDiff (const T &v, const Vector< T > &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,... More...

~AutoDiff ()

AutoDiff< T > & operator= (const T &v)
Assignment operator. More...

AutoDiff< T > & operator= (const AutoDiff< T > &other)
Assign one to another. More...

void operator*= (const AutoDiff< T > &other)
In-place mathematical operators. More...

void operator/= (const AutoDiff< T > &other)

void operator+= (const AutoDiff< T > &other)

void operator-= (const AutoDiff< T > &other)

void operator*= (const T other)

void operator/= (const T other)

void operator+= (const T other)

void operator-= (const T other)

T & value ()
Returns the value of the function. More...

const T & value () const

const Vector< T > & derivatives () const
Returns a vector of the derivatives of an AutoDiff. More...

Vector< T > & derivatives ()

void derivatives (Vector< T > &res) const

T & derivative (uInt which)
Returns a specific derivative. More...

const T & derivative (uInt which) const

T & deriv (uInt which)

const T & deriv (uInt which) const

uInt nDerivatives () const

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

Public Types inherited from casacore::AutoDiff< T >
typedef T value_type

typedef value_typereference

typedef const value_typeconst_reference

typedef value_typeiterator

typedef const value_typeconst_iterator

## Detailed Description

### template<class T> class casacore::AutoDiffA< T >

Class that computes partial derivatives by automatic differentiation.

Public interface

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tAutoDiff
Demo programs:
dAutoDiff

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

• Nothing I know

Definition at line 121 of file AutoDiffA.h.

## Constructor & Destructor Documentation

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

Construct a constant with a value of zero.

Zero derivatives.

Definition at line 125 of file AutoDiffA.h.

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

Construct a constant with a value of v.

Zero derivatives.

Definition at line 128 of file AutoDiffA.h.

template<class T>
 casacore::AutoDiffA< T >::AutoDiffA ( const T & v, const uInt ndiffs, const uInt n )
inline

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.

Definition at line 133 of file AutoDiffA.h.

template<class T>
 casacore::AutoDiffA< T >::AutoDiffA ( const T & v, const uInt ndiffs )
inline

A function f(x0,x1,...,xn,...) with a value of v.

The total number of derivatives is ndiffs. All derivatives are zero.

Definition at line 139 of file AutoDiffA.h.

template<class T>
 casacore::AutoDiffA< T >::AutoDiffA ( const AutoDiff< T > & other )
inline

Construct one from another.

Definition at line 142 of file AutoDiffA.h.

template<class T>
 casacore::AutoDiffA< T >::AutoDiffA ( const T & v, const Vector< T > & derivs )
inline

Construct a function f(x0,x1,...,xn) of a value v and a vector of derivatives derivs(0) = df/dx0, derivs(1) = df/dx1,...

Definition at line 146 of file AutoDiffA.h.

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

Definition at line 148 of file AutoDiffA.h.

## Member Function Documentation

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

Assignment operator.

Assign a constant to variable. All derivatives are zero.

Definition at line 152 of file AutoDiffA.h.

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

template<class T>
 AutoDiffA& casacore::AutoDiffA< T >::operator= ( const AutoDiff< T > & other )
inline

Assign one to another.

Definition at line 158 of file AutoDiffA.h.

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

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