Theoretica
Mathematical Library
|
Differential operators with automatic differentiation. More...
Typedefs | |
template<unsigned int N = 0> | |
using | dreal_t = multidual< N > |
Real type for multivariate automatic differentiation (read "differential real"). | |
template<unsigned int N = 0> | |
using | dvec_t = vec< dreal_t< N >, N > |
Vector type for multivariate automatic differentiation (read "differential vector"). | |
using | dreal = dreal_t< 0 > |
Real type for multivariate automatic differentiation with dynamically allocated vectors. | |
using | dvec = dvec_t< 0 > |
Vector type for multivariate automatic differentiation with dynamically allocated vectors. | |
using | dreal2 = dreal_t< 2 > |
Real type for multivariate automatic differentiation with two-dimensional statically allocated vectors. | |
using | dvec2 = dvec_t< 2 > |
Vector type for multivariate automatic differentiation with two-dimensional statically allocated vectors. | |
using | dreal3 = dreal_t< 3 > |
Real type for multivariate automatic differentiation with three-dimensional statically allocated vectors. | |
using | dvec3 = dvec_t< 3 > |
Vector type for multivariate automatic differentiation with three-dimensional statically allocated vectors. | |
using | dreal4 = dreal_t< 4 > |
Real type for multivariate automatic differentiation with four-dimensional statically allocated vectors. | |
using | dvec4 = dvec_t< 4 > |
Vector type for multivariate automatic differentiation with four-dimensional statically allocated vectors. | |
Functions | |
template<typename DualFunction = std::function<dual(dual)>, enable_dual_func< DualFunction > = true> | |
real | deriv (DualFunction f, real x) |
Compute the derivative of a function at the given point using univariate automatic differentiation. | |
template<typename DualFunction = std::function<dual(dual)>, enable_dual_func< DualFunction > = true> | |
auto | deriv (DualFunction f) |
Get a lambda function which computes the derivative of the given function at the given point, using automatic differentiation. | |
template<typename Dual2Function = std::function<dual2(dual2)>, enable_dual2_func< Dual2Function > = true> | |
real | deriv2 (Dual2Function f, real x) |
Compute the second derivative of a function at the given point using univariate automatic differentiation. | |
template<typename Dual2Function = std::function<dual2(dual2)>, enable_dual2_func< Dual2Function > = true> | |
auto | deriv2 (Dual2Function f) |
Get a lambda function which computes the second derivative of the given function at the given point, using automatic differentiation. | |
template<typename MultidualType , typename Vector = vec<real>> | |
auto | make_autodiff_arg (const Vector &x) |
Prepare a vector of multidual numbers in "canonical" form, where the i-th element of the vector has a dual part which is the i-th canonical vector. | |
template<typename Function , typename Vector = vec<real>, enable_scalar_field< Function > = true, enable_vector< Vector > = true> | |
auto | gradient (Function f, const Vector &x) |
Compute the gradient \(\nabla f = \sum_i^n \vec e_i \frac{\partial}{\partial x_i} f(\vec x)\) for a given \(\vec x\) of a scalar field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) using automatic differentiation. | |
template<typename Function , enable_scalar_field< Function > = true> | |
auto | gradient (Function f) |
Get a lambda function which computes the gradient \(\nabla f = \sum_i^n \vec e_i \frac{\partial}{\partial x_i} f(\vec x)\) of a given scalar field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at \(\vec x\) using automatic differentiation. | |
template<typename Function , typename Vector = vec<real>, enable_scalar_field< Function > = true, enable_vector< Vector > = true> | |
real | divergence (Function f, const Vector &x) |
Compute the divergence \(\sum_i^n \frac{\partial}{\partial x_i} f(\vec x)\) for a given \(\vec x\) of a scalar field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) using automatic differentiation. | |
template<typename Function , enable_scalar_field< Function > = true> | |
auto | divergence (Function f) |
Get a lambda function which computes the divergence of a given function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at a given \(\vec x\) using automatic differentiation. | |
template<unsigned int N = 0, unsigned int M = 0> | |
mat< real, M, N > | jacobian (vec< multidual< N >, M >(*f)(vec< multidual< N >, N >), const vec< real, N > &x) |
Compute the jacobian of a vector field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}^M\). | |
template<unsigned int N = 0, unsigned int M = 0> | |
auto | jacobian (vec< multidual< N >, M >(*f)(vec< multidual< N >, N >)) |
Get a lambda function which computes the jacobian of a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}^M\) for a given $\vec x$. | |
template<unsigned int N = 0> | |
vec< real, N > | curl (vec< multidual< N >, N >(*f)(vec< multidual< N >, N >), const vec< real, N > &x) |
Compute the curl for a given \(\vec x\) of a vector field defined by \(f: \mathbb{R}^3 \rightarrow \mathbb{R}^3\) using automatic differentiation. | |
template<unsigned int N = 0> | |
auto | curl (vec< multidual< N >, N >(*f)(vec< multidual< N >, N >)) |
Get a lambda function which computes the curl for a given \(\vec x\) of a vector field defined by \(f: \mathbb{R}^3 \rightarrow \mathbb{R}^3\) using automatic differentiation. | |
template<unsigned int N = 0> | |
vec< real, N > | directional_derivative (multidual< N >(*f)(vec< multidual< N >, N >), const vec< real, N > &x, const vec< real, N > &v) |
Compute the directional derivative of a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\). | |
template<unsigned int N = 0> | |
auto | directional_derivative (multidual< N >(*f)(vec< multidual< N >, N >), const vec< real, N > &v) |
Get a lambda function which computes the directional derivative of a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\). | |
template<unsigned int N = 0> | |
real | laplacian (dual2(*f)(vec< dual2, N >), const vec< real, N > &x) |
Compute the Laplacian differential operator for a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at a given $\vec x$. | |
template<unsigned int N = 0> | |
auto | laplacian (dual2(*f)(vec< dual2, N >)) |
Get a lambda function which computes the Laplacian differential operator for a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at a given $\vec x$. | |
template<unsigned int N = 0> | |
real | sturm_liouville (multidual< N >(*f)(vec< multidual< N >, N >), multidual< N >(*H)(vec< multidual< N >, N >), vec< real, N > eta) |
Compute the Sturm-Liouville operator on a generic function of the form \(f: \mathbb{R}^{2N} \rightarrow \mathbb{R}\) with respect to a given Hamiltonian function of the form \(H: \mathbb{R}^{2N} \rightarrow \mathbb{R}\) where the first N arguments are the coordinates in phase space and the last N arguments are the conjugate momenta, for a given point in phase space. | |
Differential operators with automatic differentiation.
|
inline |
Get a lambda function which computes the curl for a given \(\vec x\) of a vector field defined by \(f: \mathbb{R}^3 \rightarrow \mathbb{R}^3\) using automatic differentiation.
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
|
inline |
Compute the curl for a given \(\vec x\) of a vector field defined by \(f: \mathbb{R}^3 \rightarrow \mathbb{R}^3\) using automatic differentiation.
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
x | The point to compute the curl at. |
|
inline |
Get a lambda function which computes the derivative of the given function at the given point, using automatic differentiation.
f | The function to differentiate, with dual argument and return value. |
|
inline |
Compute the derivative of a function at the given point using univariate automatic differentiation.
f | The function to differentiate, with dual argument and return value. |
x | The coordinate to compute the derivative at. |
|
inline |
Get a lambda function which computes the second derivative of the given function at the given point, using automatic differentiation.
f | The function to differentiate, with dual2 argument and return value. |
|
inline |
Compute the second derivative of a function at the given point using univariate automatic differentiation.
f | The function to differentiate, with dual2 argument and return value. |
x | The coordinate to compute the derivative at. |
|
inline |
Get a lambda function which computes the directional derivative of a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\).
f | The function to partially differentiate |
x | The point to compute the derivative at |
v | The direction to compute the derivative on |
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
v | The direction of the derivative. |
|
inline |
Compute the directional derivative of a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\).
f | The function to partially differentiate |
x | The point to compute the derivative at |
v | The direction to compute the derivative on |
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
x | The point to compute the directional derivative at. |
v | The direction of the derivative. |
|
inline |
Get a lambda function which computes the divergence of a given function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at a given \(\vec x\) using automatic differentiation.
The returned lambda function accepts a vec<real, N> argument. The argument function may be a function pointer or lambda function, with the type dvec_t as first argument and dreal_t return type.
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
|
inline |
Compute the divergence \(\sum_i^n \frac{\partial}{\partial x_i} f(\vec x)\) for a given \(\vec x\) of a scalar field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) using automatic differentiation.
The argument function may be a function pointer or lambda function, with the type dvec_t as first argument and dreal_t return type.
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
x | The point to compute the divergence at. |
|
inline |
Get a lambda function which computes the gradient \(\nabla f = \sum_i^n \vec e_i \frac{\partial}{\partial x_i} f(\vec x)\) of a given scalar field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at \(\vec x\) using automatic differentiation.
The returned lambda function accepts a vec<real, N> argument. The argument function may be a function pointer or lambda function, with the type dvec_t as first argument and dreal_t return type.
f | A function with a vector of multidual numbers as input and a multidual number as output. |
|
inline |
Compute the gradient \(\nabla f = \sum_i^n \vec e_i \frac{\partial}{\partial x_i} f(\vec x)\) for a given \(\vec x\) of a scalar field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) using automatic differentiation.
The argument function may be a function pointer or lambda function, with the type dvec_t as first argument and dreal_t return type.
f | A function with a vector of multidual numbers as input and a multidual number as output. |
x | The point to compute the gradient at. |
|
inline |
Get a lambda function which computes the jacobian of a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}^M\) for a given $\vec x$.
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
|
inline |
Compute the jacobian of a vector field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}^M\).
f | A function with a vector of multidual numbers as input and a vector of multidual numbers as output. |
x | The point to compute the Jacobian at. |
|
inline |
Get a lambda function which computes the Laplacian differential operator for a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at a given $\vec x$.
|
inline |
Compute the Laplacian differential operator for a generic function of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}\) at a given $\vec x$.
f | A function taking a vector of dual2 numbers and returning a dual2 number. |
x | The point to compute the Laplacian at. |
|
inline |
Prepare a vector of multidual numbers in "canonical" form, where the i-th element of the vector has a dual part which is the i-th canonical vector.
This form is used to evaluate a multidual function for automatic differentiation.
|
inline |
Compute the Sturm-Liouville operator on a generic function of the form \(f: \mathbb{R}^{2N} \rightarrow \mathbb{R}\) with respect to a given Hamiltonian function of the form \(H: \mathbb{R}^{2N} \rightarrow \mathbb{R}\) where the first N arguments are the coordinates in phase space and the last N arguments are the conjugate momenta, for a given point in phase space.
f | A function taking a vector of multidual numbers and returning a multidual number. |
H | The Hamiltonian of the system. |
eta | A vector containing N = 2K elements, where the first K elements are the coordinates and the last K elements are the conjugate momenta. |