Mitsuba Renderer  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DScalar1< _Scalar, _Gradient > Struct Template Reference

Automatic differentiation scalar with first-order derivatives. More...

#include <mitsuba/core/autodiff.h>

+ Inheritance diagram for DScalar1< _Scalar, _Gradient >:

Public Types

typedef _Scalar Scalar
 
typedef _Gradient Gradient
 
typedef Eigen::Matrix
< DScalar1, 2, 1 > 
DVector2
 
typedef Eigen::Matrix
< DScalar1, 3, 1 > 
DVector3
 

Public Member Functions

Constructors and accessors
 DScalar1 (Scalar value=(Scalar) 0)
 Create a new constant automatic differentiation scalar. More...
 
 DScalar1 (size_t index, const Scalar &value)
 Construct a new scalar with the specified value and one first derivative set to 1. More...
 
 DScalar1 (Scalar value, const Gradient &grad)
 Construct a scalar associated with the given gradient. More...
 
 DScalar1 (const DScalar1 &s)
 Copy constructor. More...
 
const ScalargetValue () const
 Create a new constant automatic differentiation scalar. More...
 
const GradientgetGradient () const
 Create a new constant automatic differentiation scalar. More...
 
Comparison and assignment
void operator= (const DScalar1 &s)
 
void operator= (const Scalar &v)
 
bool operator< (const DScalar1 &s) const
 
bool operator<= (const DScalar1 &s) const
 
bool operator> (const DScalar1 &s) const
 
bool operator>= (const DScalar1 &s) const
 
bool operator< (const Scalar &s) const
 
bool operator<= (const Scalar &s) const
 
bool operator> (const Scalar &s) const
 
bool operator>= (const Scalar &s) const
 
bool operator== (const Scalar &s) const
 
bool operator!= (const Scalar &s) const
 

Protected Attributes

Scalar value
 
Gradient grad
 

Friends

Miscellaneous functions
DScalar1 sqrt (const DScalar1 &s)
 
DScalar1 pow (const DScalar1 &s, const Scalar &a)
 
DScalar1 exp (const DScalar1 &s)
 
DScalar1 log (const DScalar1 &s)
 
DScalar1 sin (const DScalar1 &s)
 
DScalar1 cos (const DScalar1 &s)
 
DScalar1 acos (const DScalar1 &s)
 
DScalar1 asin (const DScalar1 &s)
 
DScalar1 atan2 (const DScalar1 &y, const DScalar1 &x)
 

Addition

DScalar1operator+= (const DScalar1 &s)
 
DScalar1operator+= (const Scalar &v)
 
DScalar1 operator+ (const DScalar1 &lhs, const DScalar1 &rhs)
 
DScalar1 operator+ (const DScalar1 &lhs, const Scalar &rhs)
 
DScalar1 operator+ (const Scalar &lhs, const DScalar1 &rhs)
 

Subtraction

DScalar1operator-= (const DScalar1 &s)
 
DScalar1operator-= (const Scalar &v)
 
DScalar1 operator- (const DScalar1 &lhs, const DScalar1 &rhs)
 
DScalar1 operator- (const DScalar1 &lhs, const Scalar &rhs)
 
DScalar1 operator- (const Scalar &lhs, const DScalar1 &rhs)
 
DScalar1 operator- (const DScalar1 &s)
 

Division

DScalar1operator/= (const Scalar &v)
 
DScalar1 operator/ (const DScalar1 &lhs, const Scalar &rhs)
 
DScalar1 operator/ (const Scalar &lhs, const DScalar1 &rhs)
 
DScalar1 operator/ (const DScalar1 &lhs, const DScalar1 &rhs)
 
DScalar1 inverse (const DScalar1 &s)
 

Multiplication

DScalar1operator*= (const Scalar &v)
 
DScalar1 operator* (const DScalar1 &lhs, const Scalar &rhs)
 
DScalar1 operator* (const Scalar &lhs, const DScalar1 &rhs)
 
DScalar1 operator* (const DScalar1 &lhs, const DScalar1 &rhs)
 

Additional Inherited Members

- Static Public Member Functions inherited from DiffScalarBase
static void setVariableCount (size_t value)
 Set the independent variable count used by the automatic differentiation layer. More...
 
static size_t getVariableCount ()
 Get the variable count used by the automatic differentiation layer. More...
 
- Static Public Attributes inherited from DiffScalarBase
static __thread size_t m_variableCount
 

Detailed Description

template<typename _Scalar, typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
struct DScalar1< _Scalar, _Gradient >

Automatic differentiation scalar with first-order derivatives.

This class provides an instrumented "scalar" value, which may be dependent on a number of independent variables. The implementation keeps tracks of first -order drivatives with respect to these variables using a set of overloaded operations and implementations of special functions (sin, tan, exp, ..).

This is extremely useful for numerical zero-finding, particularly when analytic derivatives from programs like Maple or Mathematica suffer from excessively complicated expressions.

The class relies on templates, which makes it possible to fix the number of independent variables at compile-time so that instances can be allocated on the stack. Otherwise, they will be placed on the heap.

This is an extended C++ port of Jon Kaldor's implementation, which is based on a C version by Eitan Grinspun at Caltech)

See Also
DScalar2
Author
Wenzel Jakob

Member Typedef Documentation

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
typedef Eigen::Matrix<DScalar1, 2, 1> DScalar1< _Scalar, _Gradient >::DVector2
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
typedef Eigen::Matrix<DScalar1, 3, 1> DScalar1< _Scalar, _Gradient >::DVector3
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
typedef _Gradient DScalar1< _Scalar, _Gradient >::Gradient
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
typedef _Scalar DScalar1< _Scalar, _Gradient >::Scalar

Constructor & Destructor Documentation

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1< _Scalar, _Gradient >::DScalar1 ( Scalar  value = (Scalar) 0)
inlineexplicit

Create a new constant automatic differentiation scalar.

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1< _Scalar, _Gradient >::DScalar1 ( size_t  index,
const Scalar value 
)
inline

Construct a new scalar with the specified value and one first derivative set to 1.

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1< _Scalar, _Gradient >::DScalar1 ( Scalar  value,
const Gradient grad 
)
inline

Construct a scalar associated with the given gradient.

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1< _Scalar, _Gradient >::DScalar1 ( const DScalar1< _Scalar, _Gradient > &  s)
inline

Copy constructor.

Member Function Documentation

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
const Gradient& DScalar1< _Scalar, _Gradient >::getGradient ( ) const
inline

Create a new constant automatic differentiation scalar.

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
const Scalar& DScalar1< _Scalar, _Gradient >::getValue ( ) const
inline

Create a new constant automatic differentiation scalar.

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator!= ( const Scalar s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1& DScalar1< _Scalar, _Gradient >::operator*= ( const Scalar v)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1& DScalar1< _Scalar, _Gradient >::operator+= ( const DScalar1< _Scalar, _Gradient > &  s)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1& DScalar1< _Scalar, _Gradient >::operator+= ( const Scalar v)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1& DScalar1< _Scalar, _Gradient >::operator-= ( const DScalar1< _Scalar, _Gradient > &  s)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1& DScalar1< _Scalar, _Gradient >::operator-= ( const Scalar v)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1& DScalar1< _Scalar, _Gradient >::operator/= ( const Scalar v)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator< ( const DScalar1< _Scalar, _Gradient > &  s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator< ( const Scalar s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator<= ( const DScalar1< _Scalar, _Gradient > &  s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator<= ( const Scalar s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
void DScalar1< _Scalar, _Gradient >::operator= ( const DScalar1< _Scalar, _Gradient > &  s)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
void DScalar1< _Scalar, _Gradient >::operator= ( const Scalar v)
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator== ( const Scalar s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator> ( const DScalar1< _Scalar, _Gradient > &  s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator> ( const Scalar s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator>= ( const DScalar1< _Scalar, _Gradient > &  s) const
inline
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
bool DScalar1< _Scalar, _Gradient >::operator>= ( const Scalar s) const
inline

Friends And Related Function Documentation

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 acos ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 asin ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 atan2 ( const DScalar1< _Scalar, _Gradient > &  y,
const DScalar1< _Scalar, _Gradient > &  x 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 cos ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 exp ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 inverse ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 log ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator* ( const DScalar1< _Scalar, _Gradient > &  lhs,
const Scalar rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator* ( const Scalar lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator* ( const DScalar1< _Scalar, _Gradient > &  lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator+ ( const DScalar1< _Scalar, _Gradient > &  lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator+ ( const DScalar1< _Scalar, _Gradient > &  lhs,
const Scalar rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator+ ( const Scalar lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator- ( const DScalar1< _Scalar, _Gradient > &  lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator- ( const DScalar1< _Scalar, _Gradient > &  lhs,
const Scalar rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator- ( const Scalar lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator- ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator/ ( const DScalar1< _Scalar, _Gradient > &  lhs,
const Scalar rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator/ ( const Scalar lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 operator/ ( const DScalar1< _Scalar, _Gradient > &  lhs,
const DScalar1< _Scalar, _Gradient > &  rhs 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 pow ( const DScalar1< _Scalar, _Gradient > &  s,
const Scalar a 
)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 sin ( const DScalar1< _Scalar, _Gradient > &  s)
friend
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
DScalar1 sqrt ( const DScalar1< _Scalar, _Gradient > &  s)
friend

Member Data Documentation

template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
Gradient DScalar1< _Scalar, _Gradient >::grad
protected
template<typename _Scalar , typename _Gradient = Eigen::Matrix<_Scalar, Eigen::Dynamic, 1>>
Scalar DScalar1< _Scalar, _Gradient >::value
protected

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