Theoretica
Scientific Computing
Loading...
Searching...
No Matches
theoretica::autodiff Namespace Reference

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 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_vector_field< Function > = true, enable_vector< Vector > = true>
real divergence (Function V, const Vector &x)
 Compute the divergence \(\sum_i^n \frac{\partial}{\partial x_i} V_i(\vec x)\) for a given \(\vec x\) of a vector field of the form \(V: \mathbb{R}^N \rightarrow \mathbb{R}^N\) using automatic differentiation.
 
template<typename Function , enable_scalar_field< Function > = true>
auto divergence (Function V)
 Get a lambda function which computes the divergence of a given function of the form \(V: \mathbb{R}^N \rightarrow \mathbb{R}^N\) at a given \(\vec x\) using automatic differentiation.
 
template<typename MultidualFunction , typename Vector , enable_vector< Vector > = true, enable_vector_field< MultidualFunction > = true>
auto jacobian (MultidualFunction f, const Vector &x)
 Compute the jacobian of a vector field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}^M\).
 
template<typename MultidualFunction , enable_vector_field< MultidualFunction > = true>
auto jacobian (MultidualFunction f)
 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<typename MultidualFunction , typename Vector , enable_vector< Vector > = true, enable_vector_field< MultidualFunction > = true>
auto curl (MultidualFunction f, const Vector &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<typename MultidualFunction , enable_vector_field< MultidualFunction > = true>
auto curl (MultidualFunction f)
 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<typename Dual2Function , typename Vector , enable_vector< Vector > = true>
real laplacian (Dual2Function f, const Vector &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<typename Dual2Function >
auto laplacian (Dual2Function f)
 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$.
 

Detailed Description

Differential operators with automatic differentiation.

Function Documentation

◆ curl() [1/2]

template<typename MultidualFunction , enable_vector_field< MultidualFunction > = true>
auto theoretica::autodiff::curl ( MultidualFunction  f)
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.

Parameters
fA function with a vector of multidual numbers as input and a vector of multidual numbers as output.
Returns
A lambda function which computes the curl of f.

◆ curl() [2/2]

template<typename MultidualFunction , typename Vector , enable_vector< Vector > = true, enable_vector_field< MultidualFunction > = true>
auto theoretica::autodiff::curl ( MultidualFunction  f,
const Vector x 
)
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.

Parameters
fA function with a vector of multidual numbers as input and a vector of multidual numbers as output.
xThe point to compute the curl at.
Returns
The curl of f at x.

◆ deriv() [1/2]

template<typename DualFunction = std::function<dual(dual)>, enable_dual_func< DualFunction > = true>
auto theoretica::autodiff::deriv ( DualFunction  f)
inline

Get a lambda function which computes the derivative of the given function at the given point, using automatic differentiation.

Parameters
fThe function to differentiate, with dual argument and return value.
Returns
A lambda function which computes the derivative of f using automatic differentiation.

◆ deriv() [2/2]

template<typename DualFunction = std::function<dual(dual)>, enable_dual_func< DualFunction > = true>
real theoretica::autodiff::deriv ( DualFunction  f,
real  x 
)
inline

Compute the derivative of a function at the given point using univariate automatic differentiation.

Parameters
fThe function to differentiate, with dual argument and return value.
xThe coordinate to compute the derivative at.
Returns
The derivative of f at x.

◆ deriv2() [1/2]

template<typename Dual2Function = std::function<dual2(dual2)>, enable_dual2_func< Dual2Function > = true>
auto theoretica::autodiff::deriv2 ( Dual2Function  f)
inline

Get a lambda function which computes the second derivative of the given function at the given point, using automatic differentiation.

Parameters
fThe function to differentiate, with dual2 argument and return value.
Returns
A lambda function which computes the derivative of f using automatic differentiation.

◆ deriv2() [2/2]

template<typename Dual2Function = std::function<dual2(dual2)>, enable_dual2_func< Dual2Function > = true>
real theoretica::autodiff::deriv2 ( Dual2Function  f,
real  x 
)
inline

Compute the second derivative of a function at the given point using univariate automatic differentiation.

Parameters
fThe function to differentiate, with dual2 argument and return value.
xThe coordinate to compute the derivative at.
Returns
The derivative of f at x.

◆ divergence() [1/2]

template<typename Function , enable_scalar_field< Function > = true>
auto theoretica::autodiff::divergence ( Function  V)
inline

Get a lambda function which computes the divergence of a given function of the form \(V: \mathbb{R}^N \rightarrow \mathbb{R}^N\) 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.

Parameters
VA function with a vector of multidual numbers as input and a vector of multidual numbers as output.
Returns
A lambda function which computes the divergence of V at x.

◆ divergence() [2/2]

template<typename Function , typename Vector = vec<real>, enable_vector_field< Function > = true, enable_vector< Vector > = true>
real theoretica::autodiff::divergence ( Function  V,
const Vector x 
)
inline

Compute the divergence \(\sum_i^n \frac{\partial}{\partial x_i} V_i(\vec x)\) for a given \(\vec x\) of a vector field of the form \(V: \mathbb{R}^N \rightarrow \mathbb{R}^N\) using automatic differentiation.

The argument function may be a function pointer or lambda function, with the type dvec_t as first argument and return type.

Parameters
VA function with a vector of multidual numbers as input and a vector of multidual numbers as output.
xThe point to compute the divergence at.
Returns
The divergence of V at x.

◆ gradient() [1/2]

template<typename Function , enable_scalar_field< Function > = true>
auto theoretica::autodiff::gradient ( Function  f)
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.

Parameters
fA function with a vector of multidual numbers as input and a multidual number as output.
Returns
A lambda function which computes the gradient of f.

◆ gradient() [2/2]

template<typename Function , typename Vector = vec<real>, enable_scalar_field< Function > = true, enable_vector< Vector > = true>
auto theoretica::autodiff::gradient ( Function  f,
const Vector x 
)
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.

Parameters
fA function with a vector of multidual numbers as input and a multidual number as output.
xThe point to compute the gradient at.
Returns
The gradient of f computed at x.

◆ jacobian() [1/2]

template<typename MultidualFunction , enable_vector_field< MultidualFunction > = true>
auto theoretica::autodiff::jacobian ( MultidualFunction  f)
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$.

Parameters
fA function with a vector of multidual numbers as input and a vector of multidual numbers as output.
Returns
A lambda function which computes the Jacobian matrix of f.

◆ jacobian() [2/2]

template<typename MultidualFunction , typename Vector , enable_vector< Vector > = true, enable_vector_field< MultidualFunction > = true>
auto theoretica::autodiff::jacobian ( MultidualFunction  f,
const Vector x 
)
inline

Compute the jacobian of a vector field of the form \(f: \mathbb{R}^N \rightarrow \mathbb{R}^M\).

Parameters
fA function with a vector of multidual numbers as input and a vector of multidual numbers as output.
xThe point to compute the Jacobian at.
Returns
The Jacobian matrix of f at x.

◆ laplacian() [1/2]

template<typename Dual2Function >
auto theoretica::autodiff::laplacian ( Dual2Function  f)
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$.

Parameters
fA function taking a vector of dual2 numbers and returning a dual2 number.
Returns
A lambda function which computes the Laplacian of f at x.

◆ laplacian() [2/2]

template<typename Dual2Function , typename Vector , enable_vector< Vector > = true>
real theoretica::autodiff::laplacian ( Dual2Function  f,
const Vector 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$.

Parameters
fA function taking a vector of dual2 numbers and returning a dual2 number.
xThe point to compute the Laplacian at.
Returns
The Laplacian of f at x.