Wildmeshing Toolkit
|
Automatic differentiation scalar with first-order derivatives. More...
#include <autodiff.h>
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 Scalar & | getValue () const |
const Gradient & | getGradient () const |
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 |
Static Public Member Functions | |
Vector helper functions | |
static DVector2 | vector (const Eigen::Matrix< Scalar, 2, 1 > &v) |
Initialize a constant two-dimensional vector. More... | |
static DVector3 | vector (const Eigen::Matrix< Scalar, 3, 1 > &v) |
Create a constant three-dimensional vector. More... | |
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... | |
Protected Attributes | |
Scalar | value |
Gradient | grad |
Friends | |
Miscellaneous functions | |
DScalar1 | abs (const DScalar1 &s) |
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 | |
DScalar1 & | operator+= (const DScalar1 &s) |
DScalar1 & | operator+= (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 | |
DScalar1 & | operator-= (const DScalar1 &s) |
DScalar1 & | operator-= (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 | |
DScalar1 & | operator/= (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 | |
DScalar1 & | operator*= (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 Attributes inherited from DiffScalarBase | |
static thread_local size_t | m_variableCount |
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)
Definition at line 114 of file autodiff.h.
typedef Eigen::Matrix<DScalar1, 2, 1> DScalar1< _Scalar, _Gradient >::DVector2 |
Definition at line 119 of file autodiff.h.
typedef Eigen::Matrix<DScalar1, 3, 1> DScalar1< _Scalar, _Gradient >::DVector3 |
Definition at line 120 of file autodiff.h.
typedef _Gradient DScalar1< _Scalar, _Gradient >::Gradient |
Definition at line 118 of file autodiff.h.
typedef _Scalar DScalar1< _Scalar, _Gradient >::Scalar |
Definition at line 117 of file autodiff.h.
|
inlineexplicit |
Create a new constant automatic differentiation scalar.
Definition at line 127 of file autodiff.h.
References DiffScalarBase::getVariableCount(), and DScalar1< _Scalar, _Gradient >::grad.
Referenced by DScalar1< _Scalar, _Gradient >::vector().
|
inline |
Construct a new scalar with the specified value and one first derivative set to 1.
Definition at line 135 of file autodiff.h.
References DiffScalarBase::getVariableCount(), and DScalar1< _Scalar, _Gradient >::grad.
|
inline |
Construct a scalar associated with the given gradient.
Definition at line 145 of file autodiff.h.
|
inline |
Copy constructor.
Definition at line 149 of file autodiff.h.
|
inline |
Definition at line 153 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad.
Referenced by operator<<().
|
inline |
Definition at line 152 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
Referenced by operator<<().
|
inline |
Definition at line 412 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 288 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad, and DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 173 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad, and DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 180 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 213 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad, and DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 220 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 258 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad, and DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 403 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 407 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 404 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 408 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 393 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad, and DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 398 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::grad, and DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 411 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 405 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 409 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 406 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inline |
Definition at line 410 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::value.
|
inlinestatic |
Initialize a constant two-dimensional vector.
Definition at line 422 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::DScalar1().
|
inlinestatic |
Create a constant three-dimensional vector.
Definition at line 428 of file autodiff.h.
References DScalar1< _Scalar, _Gradient >::DScalar1().
|
friend |
Definition at line 302 of file autodiff.h.
|
friend |
Definition at line 353 of file autodiff.h.
|
friend |
Definition at line 365 of file autodiff.h.
|
friend |
Definition at line 377 of file autodiff.h.
|
friend |
Definition at line 347 of file autodiff.h.
|
friend |
Definition at line 325 of file autodiff.h.
|
friend |
Definition at line 249 of file autodiff.h.
|
friend |
Definition at line 333 of file autodiff.h.
|
friend |
Definition at line 281 of file autodiff.h.
|
friend |
Definition at line 271 of file autodiff.h.
|
friend |
Definition at line 276 of file autodiff.h.
|
friend |
Definition at line 158 of file autodiff.h.
|
friend |
Definition at line 163 of file autodiff.h.
|
friend |
Definition at line 168 of file autodiff.h.
|
friend |
Definition at line 193 of file autodiff.h.
|
friend |
Definition at line 198 of file autodiff.h.
|
friend |
Definition at line 208 of file autodiff.h.
|
friend |
Definition at line 203 of file autodiff.h.
|
friend |
Definition at line 244 of file autodiff.h.
|
friend |
Definition at line 231 of file autodiff.h.
|
friend |
Definition at line 239 of file autodiff.h.
|
friend |
Definition at line 317 of file autodiff.h.
|
friend |
Definition at line 341 of file autodiff.h.
|
friend |
Definition at line 307 of file autodiff.h.
|
protected |
Definition at line 463 of file autodiff.h.
Referenced by DScalar1< _Scalar, _Gradient >::DScalar1(), DScalar1< _Scalar, _Gradient >::getGradient(), DScalar1< _Scalar, _Gradient >::operator*=(), DScalar1< _Scalar, _Gradient >::operator+=(), DScalar1< _Scalar, _Gradient >::operator-=(), DScalar1< _Scalar, _Gradient >::operator/=(), and DScalar1< _Scalar, _Gradient >::operator=().
|
protected |
Definition at line 462 of file autodiff.h.
Referenced by DScalar1< _Scalar, _Gradient >::getValue(), DScalar1< _Scalar, _Gradient >::operator!=(), DScalar1< _Scalar, _Gradient >::operator*=(), DScalar1< _Scalar, _Gradient >::operator+=(), DScalar1< _Scalar, _Gradient >::operator-=(), DScalar1< _Scalar, _Gradient >::operator/=(), DScalar1< _Scalar, _Gradient >::operator<(), DScalar1< _Scalar, _Gradient >::operator<=(), DScalar1< _Scalar, _Gradient >::operator=(), DScalar1< _Scalar, _Gradient >::operator==(), DScalar1< _Scalar, _Gradient >::operator>(), and DScalar1< _Scalar, _Gradient >::operator>=().