JUK1
AutoDifferentiation Namespace Reference

a namespace to hold the messiness of my auto-differentiator More...

Functions

template<typename ValType , size_t NumVars>
 requires (std::is_arithmetic< ValType >::value &&NumVars >=0) struct DiffVar
 
template<typename ValType , size_t NumVars, typename F1 , typename F2 >
 requires (std::is_arithmetic< ValType >::value &&NumVars >=0) const expr auto diffFunc(const DiffVar< ValType
 
 while (it1 !=toRet.diffVars.end() &&it2 !=arg.diffVars.end())
 
DiffVar< ValType, NumVars > toRet (derivEval)
 
template<typename ValType , size_t NumVars, typename OT >
 requires (std::is_arithmetic< ValType >::value &&NumVars >=0) &&(!std
 
DiffVar< ValType, NumVars > toRet (func(arg.var, exponent.var))
 
DiffVar< ValType, NumVars > toRet (funcResult)
 

Variables

template<typename RT , typename LT , typename OT >
concept MultipliableResult
 
template<typename RT , typename LT , typename OT >
concept AddableResult
 
template<typename RT , typename LT , typename OT >
concept SubtractableResult
 
template<typename RT , typename LT , typename OT >
concept DivisableResult
 
NumVars & arg
 
NumVars F1 func
 
NumVars F1 F2 deriv
 
auto it1 = toRet.diffVars.begin()
 
auto it2 = arg.diffVars.begin()
 
auto derivEval = deriv(arg.var)
 
return toRet
 
toRet var = derivEval
 
NumVars DiffVar< ValType, NumVars > exponent
 
auto it3 = exponent.diffVars.begin()
 

Detailed Description

a namespace to hold the messiness of my auto-differentiator

In essence the idea of this header is to allow easy determination of the jacobian of a non-linear element without having to manually differentiate a function. Sometimes this can also lead to faster implementations than an analytical derivative. The main advantage though, is being able to express the equation once in a natural format.

Function Documentation

◆ requires() [1/3]

template<typename ValType , size_t NumVars, typename OT >
AutoDifferentiation::requires ( std::is_arithmetic< ValType >::value &&NumVars >=  0) &&

Definition at line 368 of file AutoDifferentiation.hpp.

◆ requires() [2/3]

template<typename ValType , size_t NumVars, typename F1 , typename F2 >
AutoDifferentiation::requires ( std::is_arithmetic< ValType >::value &&NumVars >=  0) const

◆ requires() [3/3]

template<typename ValType , size_t NumVars>
AutoDifferentiation::requires ( std::is_arithmetic< ValType >::value &&NumVars >=  0)

Definition at line 41 of file AutoDifferentiation.hpp.

◆ toRet() [1/3]

DiffVar<ValType, NumVars> AutoDifferentiation::toRet ( derivEval  )

◆ toRet() [2/3]

DiffVar<ValType, NumVars> AutoDifferentiation::toRet ( func(arg.var, exponent.var)  )

◆ toRet() [3/3]

DiffVar<ValType, NumVars> AutoDifferentiation::toRet ( funcResult  )

◆ while()

AutoDifferentiation::while ( it1 = toRet.diffVars.end() && it2 != arg.diffVars.end())

Definition at line 294 of file AutoDifferentiation.hpp.

Variable Documentation

◆ AddableResult

template<typename RT , typename LT , typename OT >
concept AutoDifferentiation::AddableResult
Initial value:
= requires(LT lhs, OT rhs) {
std::is_same<RT, decltype(lhs += rhs)>::value;
}
requires(std::is_arithmetic< ValType >::value &&NumVars >=0) &&(!std

Definition at line 25 of file AutoDifferentiation.hpp.

◆ arg

NumVars & AutoDifferentiation::arg
Initial value:
{
return diffFunc(
arg, [](ValType v) { return std::sin(v); },
[](ValType v) { return std::cos(v); })
v
Definition: comp.m:4
ang(col sin()

Definition at line 287 of file AutoDifferentiation.hpp.

◆ deriv

auto AutoDifferentiation::deriv
Initial value:
{
DiffVar<ValType, NumVars> toRet(func(arg.var))
DiffVar< ValType, NumVars > toRet(funcResult)

Definition at line 288 of file AutoDifferentiation.hpp.

◆ derivEval

auto AutoDifferentiation::derivEval = deriv(arg.var)

Definition at line 293 of file AutoDifferentiation.hpp.

◆ DivisableResult

template<typename RT , typename LT , typename OT >
concept AutoDifferentiation::DivisableResult
Initial value:
= requires(LT lhs, OT rhs) {
std::is_same<RT, decltype(lhs /= rhs)>::value;
}

Definition at line 35 of file AutoDifferentiation.hpp.

◆ exponent

NumVars DiffVar<ValType, NumVars> AutoDifferentiation::exponent
Initial value:
{
auto func = [](ValType v, ValType exponent) { return std::pow(v, exponent); }
NumVars DiffVar< ValType, NumVars > exponent

Definition at line 379 of file AutoDifferentiation.hpp.

◆ func

NumVars F1 AutoDifferentiation::func

Definition at line 287 of file AutoDifferentiation.hpp.

◆ it1

auto AutoDifferentiation::it1 = toRet.diffVars.begin()

Definition at line 291 of file AutoDifferentiation.hpp.

◆ it2

auto AutoDifferentiation::it2 = arg.diffVars.begin()

Definition at line 292 of file AutoDifferentiation.hpp.

◆ it3

auto AutoDifferentiation::it3 = exponent.diffVars.begin()

Definition at line 390 of file AutoDifferentiation.hpp.

◆ MultipliableResult

template<typename RT , typename LT , typename OT >
concept AutoDifferentiation::MultipliableResult
Initial value:
= requires(LT lhs, OT rhs) {
std::is_same<RT, decltype(lhs *= rhs)>::value;
}

Definition at line 20 of file AutoDifferentiation.hpp.

◆ SubtractableResult

template<typename RT , typename LT , typename OT >
concept AutoDifferentiation::SubtractableResult
Initial value:
= requires(LT lhs, OT rhs) {
std::is_same<RT, decltype(lhs -= rhs)>::value;
}

Definition at line 30 of file AutoDifferentiation.hpp.

◆ toRet

return AutoDifferentiation::toRet

Definition at line 299 of file AutoDifferentiation.hpp.

◆ var

toRet AutoDifferentiation::var = derivEval

Definition at line 363 of file AutoDifferentiation.hpp.