casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions
casa::AutoDiffX< T > Class Template Reference

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

#include <AutoDiffX.h>

Inheritance diagram for casa::AutoDiffX< T >:
casa::AutoDiff< T >

List of all members.

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.

Detailed Description

template<class T>
class casa::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> >;

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


Constructor & Destructor Documentation

template<class T >
casa::AutoDiffX< T >::AutoDiffX ( ) [inline]

Construct a constant with a value of zero.

Zero derivatives.

Definition at line 125 of file AutoDiffX.h.

template<class T >
casa::AutoDiffX< T >::AutoDiffX ( const T &  v) [inline]

Construct a constant with a value of v.

Zero derivatives.

Definition at line 128 of file AutoDiffX.h.

template<class T >
casa::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 133 of file AutoDiffX.h.

template<class T >
casa::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 139 of file AutoDiffX.h.

template<class T >
casa::AutoDiffX< T >::AutoDiffX ( const AutoDiff< T > &  other) [inline]

Construct one from another.

Definition at line 142 of file AutoDiffX.h.

template<class T >
casa::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 146 of file AutoDiffX.h.

template<class T >
casa::AutoDiffX< T >::~AutoDiffX ( ) [inline]

Definition at line 148 of file AutoDiffX.h.


Member Function Documentation

template<class T >
AutoDiffX<T>& casa::AutoDiffX< T >::operator= ( const T &  v) [inline]

Assignment operator.

Assign a constant to variable. All derivatives are zero.

Reimplemented from casa::AutoDiff< T >.

Definition at line 152 of file AutoDiffX.h.

Referenced by casa::AutoDiffX< T >::operator=().

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

Assign one to another.

Reimplemented from casa::AutoDiff< T >.

Definition at line 158 of file AutoDiffX.h.

References casa::AutoDiffX< T >::operator=().


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