Automatic differentiation scalar with first- and second-order derivatives. More...
#include <mitsuba/core/autodiff.h>
Public Types | |
typedef _Scalar | Scalar |
typedef _Gradient | Gradient |
typedef _Hessian | Hessian |
typedef Eigen::Matrix < DScalar2, 2, 1 > | DVector2 |
typedef Eigen::Matrix < DScalar2, 3, 1 > | DVector3 |
Public Member Functions | |
Constructors and accessors | |
DScalar2 (Scalar value=(Scalar) 0) | |
Create a new constant automatic differentiation scalar. More... | |
DScalar2 (size_t index, const Scalar &value) | |
Construct a new scalar with the specified value and one first derivative set to 1. More... | |
DScalar2 (Scalar value, const Gradient &grad, const Hessian &hess) | |
Construct a scalar associated with the given gradient and Hessian. More... | |
DScalar2 (const DScalar2 &s) | |
Copy constructor. More... | |
const Scalar & | getValue () const |
Create a new constant automatic differentiation scalar. More... | |
const Gradient & | getGradient () const |
Create a new constant automatic differentiation scalar. More... | |
const Hessian & | getHessian () const |
Create a new constant automatic differentiation scalar. More... | |
Comparison and assignment | |
void | operator= (const DScalar2 &s) |
void | operator= (const Scalar &v) |
bool | operator< (const DScalar2 &s) const |
bool | operator<= (const DScalar2 &s) const |
bool | operator> (const DScalar2 &s) const |
bool | operator>= (const DScalar2 &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 |
Hessian | hess |
Friends | |
Miscellaneous functions | |
DScalar2 | sqrt (const DScalar2 &s) |
DScalar2 | pow (const DScalar2 &s, const Scalar &a) |
DScalar2 | exp (const DScalar2 &s) |
DScalar2 | log (const DScalar2 &s) |
DScalar2 | sin (const DScalar2 &s) |
DScalar2 | cos (const DScalar2 &s) |
DScalar2 | acos (const DScalar2 &s) |
DScalar2 | asin (const DScalar2 &s) |
DScalar2 | atan2 (const DScalar2 &y, const DScalar2 &x) |
Addition | |
DScalar2 & | operator+= (const DScalar2 &s) |
DScalar2 & | operator+= (const Scalar &v) |
DScalar2 | operator+ (const DScalar2 &lhs, const DScalar2 &rhs) |
DScalar2 | operator+ (const DScalar2 &lhs, const Scalar &rhs) |
DScalar2 | operator+ (const Scalar &lhs, const DScalar2 &rhs) |
Subtraction | |
DScalar2 & | operator-= (const DScalar2 &s) |
DScalar2 & | operator-= (const Scalar &v) |
DScalar2 | operator- (const DScalar2 &lhs, const DScalar2 &rhs) |
DScalar2 | operator- (const DScalar2 &lhs, const Scalar &rhs) |
DScalar2 | operator- (const Scalar &lhs, const DScalar2 &rhs) |
DScalar2 | operator- (const DScalar2 &s) |
Division | |
DScalar2 & | operator/= (const Scalar &v) |
DScalar2 | operator/ (const DScalar2 &lhs, const Scalar &rhs) |
DScalar2 | operator/ (const Scalar &lhs, const DScalar2 &rhs) |
DScalar2 | operator/ (const DScalar2 &lhs, const DScalar2 &rhs) |
DScalar2 | inverse (const DScalar2 &s) |
Multiplication | |
DScalar2 & | operator*= (const Scalar &v) |
DScalar2 | operator* (const DScalar2 &lhs, const Scalar &rhs) |
DScalar2 | operator* (const Scalar &lhs, const DScalar2 &rhs) |
DScalar2 | operator* (const DScalar2 &lhs, const DScalar2 &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 |
Automatic differentiation scalar with first- and second-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 and second-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 optimization, 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)
typedef Eigen::Matrix<DScalar2, 2, 1> DScalar2< _Scalar, _Gradient, _Hessian >::DVector2 |
typedef Eigen::Matrix<DScalar2, 3, 1> DScalar2< _Scalar, _Gradient, _Hessian >::DVector3 |
typedef _Gradient DScalar2< _Scalar, _Gradient, _Hessian >::Gradient |
typedef _Hessian DScalar2< _Scalar, _Gradient, _Hessian >::Hessian |
typedef _Scalar DScalar2< _Scalar, _Gradient, _Hessian >::Scalar |
|
inlineexplicit |
Create a new constant automatic differentiation scalar.
|
inline |
Construct a new scalar with the specified value and one first derivative set to 1.
|
inline |
Construct a scalar associated with the given gradient and Hessian.
|
inline |
Copy constructor.
|
inline |
Create a new constant automatic differentiation scalar.
|
inline |
Create a new constant automatic differentiation scalar.
|
inline |
Create a new constant automatic differentiation scalar.
|
inline |
|
inline |
Product rule
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
Product rule
|
friend |
Product rule
|
friend |
Product rule
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
protected |
|
protected |
|
protected |