Loading...
Searching...
No Matches
casacore::AutoDiffX< T > Class Template Reference
scimath package (libcasa_scimath) » Mathematics_module

More...

`#include <AutoDiffX.h>`

## Public Member Functions

| AutoDiffX ()
| Construct a constant with a value of zero.
| AutoDiffX (const T &v)
| Construct a constant with a value of v.
| AutoDiffX (const T &v, const uInt ndiffs, const uInt n)
| A function f(x0,x1,...,xn,...) with a value of v.
| AutoDiffX (const T &v, const uInt ndiffs)
| A function f(x0,x1,...,xn,...) with a value of v.
| AutoDiffX (const AutoDiff< T > &other)
| Construct one from another.
| 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,...
| ~AutoDiffX ()
AutoDiffX< T > & | operator= (const T &v)
| Assignment operator.
AutoDiffX< T > & | operator= (const AutoDiff< T > &other)
| Assign one to another.
Public Member Functions inherited from casacore::AutoDiff< T >
| AutoDiff ()
| Construct a constant with a value of zero.
| AutoDiff (const T &v)
| Construct a constant with a value of v.
| AutoDiff (const T &v, const uInt ndiffs, const uInt n)
| A function f(x0,x1,...,xn,...) with a value of v.
| AutoDiff (const T &v, const uInt ndiffs)
| A function f(x0,x1,...,xn,...) with a value of v.
| AutoDiff (const AutoDiff< T > &other)
| Construct one from another.
| 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,...
| ~AutoDiff ()
AutoDiff< T > & | operator= (const T &v)
| Assignment operator.
AutoDiff< T > & | operator= (const AutoDiff< T > &other)
| Assign one to another.
void | operator*= (const AutoDiff< T > &other)
| In-place mathematical operators.
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.
const T & | value () const
const Vector< T > & | derivatives () const
| Returns a vector of the derivatives of an AutoDiff.
Vector< T > & | derivatives ()
void | derivatives (Vector< T > &res) const
T & | derivative (uInt which)
| Returns a specific derivative.
const T & | derivative (uInt which) const
T & | deriv (uInt which)
const T & | deriv (uInt which) const
uInt | nDerivatives () const
| Return total number of derivatives.
Bool | isConstant () const
| Is it a constant, i.e., with zero derivatives?

## Additional Inherited Members

Public Types inherited from casacore::AutoDiff< T >
typedef T | value_type
typedef value_type & | reference
typedef const value_type & | const_reference
typedef value_type * | iterator
typedef const value_type * | const_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

- AutoDiff

### 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> >;
casacore::AutoDiffX::AutoDiffX
AutoDiffX()
Construct a constant with a value of zero.
Definition AutoDiffX.h:120
casacore::AutoDiff::AutoDiff
AutoDiff()
Construct a constant with a value of zero.
casacore::set
void set(const T &val)
Definition Block.h:532
casacore::Double
double Double
Definition aipstype.h:53

### 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 116 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 120 of file AutoDiffX.h.

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

Referenced by operator=(), and operator=().

## 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 123 of file AutoDiffX.h.

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

## 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 128 of file AutoDiffX.h.

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

## 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 134 of file AutoDiffX.h.

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

## AutoDiffX() [5/6]

template<class T>

casacore::AutoDiffX< T >::AutoDiffX | ( | const AutoDiff< T > & | other | ) |

inline

Construct one from another.

Definition at line 137 of file AutoDiffX.h.

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

## 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 141 of file AutoDiffX.h.

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

## ~AutoDiffX()

template<class T>

casacore::AutoDiffX< T >::~AutoDiffX | ( |  | ) |

inline

Definition at line 143 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 153 of file AutoDiffX.h.

References casacore::AutoDiff< T >::AutoDiff(), AutoDiffX(), and 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 147 of file AutoDiffX.h.

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

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

- scimath/Mathematics/AutoDiffX.h