casacore
Public Member Functions | List of all members
casacore::AutoDiffX< T > Class Template Reference

More...

#include <AutoDiffX.h>

Public Member Functions

 AutoDiffX ()
 Construct a constant with a value of zero. More...
 
 AutoDiffX (const T &v)
 Construct a constant with a value of v. More...
 
 AutoDiffX (const T &v, const uInt ndiffs, const uInt n)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 AutoDiffX (const T &v, const uInt ndiffs)
 A function f(x0,x1,...,xn,...) with a value of v. More...
 
 AutoDiffX (const AutoDiff< T > &other)
 Construct one from another. More...
 
 AutoDiffX (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...
 
 ~AutoDiffX ()
 
AutoDiffX< T > & operator= (const T &v)
 Assignment operator. More...
 
AutoDiffX< 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
 Return total number of derivatives. More...
 
Bool isConstant () const
 Is it a constant, i.e., with zero derivatives? More...
 

Additional Inherited Members

- 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::AutoDiffX< 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:
tAutoDiff
Demo programs:
dAutoDiff

Prerequisite

Etymology

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

Synopsis

AutoDiffX 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<AutoDiffX<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<AutoDiffX<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> >;
AutoDiffX()
Construct a constant with a value of zero.
Definition: AutoDiffX.h:123
double Double
Definition: aipstype.h:55

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 AutoDiffX.h.

Constructor & Destructor Documentation

◆ AutoDiffX() [1/6]

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

Construct a constant with a value of zero.

Zero derivatives.

Definition at line 123 of file AutoDiffX.h.

◆ AutoDiffX() [2/6]

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

Construct a constant with a value of v.

Zero derivatives.

Definition at line 126 of file AutoDiffX.h.

◆ AutoDiffX() [3/6]

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

◆ AutoDiffX() [4/6]

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

◆ AutoDiffX() [5/6]

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

Construct one from another.

Definition at line 140 of file AutoDiffX.h.

◆ AutoDiffX() [6/6]

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

◆ ~AutoDiffX()

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

Definition at line 146 of file AutoDiffX.h.

Member Function Documentation

◆ operator=() [1/2]

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

Assign one to another.

Definition at line 156 of file AutoDiffX.h.

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

◆ operator=() [2/2]

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

Assignment operator.

Assign a constant to variable. All derivatives are zero.

Definition at line 150 of file AutoDiffX.h.

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


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