77 lines
1.9 KiB
C++
Executable file
77 lines
1.9 KiB
C++
Executable file
#ifndef DEF_AUTOMATIC_DIFFERENTIATION_MATH
|
|
#define DEF_AUTOMATIC_DIFFERENTIATION_MATH
|
|
|
|
#include <cmath>
|
|
|
|
// Basic mathematical functions for Scalar numbers
|
|
|
|
// Trigonometric functions
|
|
template<typename Scalar> Scalar sec(const Scalar & x) {
|
|
return Scalar(1.)/cos(x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar cot(const Scalar & x) {
|
|
return cos(x)/sin(x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar csc(const Scalar & x) {
|
|
return Scalar(1.)/sin(x);
|
|
}
|
|
|
|
// Inverse trigonometric functions
|
|
template<typename Scalar> Scalar asec(const Scalar & x) {
|
|
return acos(Scalar(1.)/x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar acot(const Scalar & x) {
|
|
return atan(Scalar(1.)/x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar acsc(const Scalar & x) {
|
|
return asin(Scalar(1.)/x);
|
|
}
|
|
|
|
// Hyperbolic trigonometric functions
|
|
template<typename Scalar> Scalar sech(const Scalar & x) {
|
|
return Scalar(1.)/cosh(x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar coth(const Scalar & x) {
|
|
return cosh(x)/sinh(x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar csch(const Scalar & x) {
|
|
return Scalar(1.)/sinh(x);
|
|
}
|
|
|
|
// Inverse hyperbolic trigonometric functions
|
|
template<typename Scalar> Scalar asech(const Scalar & x) {
|
|
return log((Scalar(1.) + sqrt(Scalar(1.) - x*x))/x);
|
|
}
|
|
|
|
template<typename Scalar> Scalar acoth(const Scalar & x) {
|
|
return Scalar(0.5)*log((x + Scalar(1.))/(x - Scalar(1.)));
|
|
}
|
|
|
|
template<typename Scalar> Scalar acsch(const Scalar & x) {
|
|
return (x >= Scalar(0.)) ? log((Scalar(1.) + sqrt(Scalar(1.) + x*x))/x) : log((Scalar(1.) - sqrt(Scalar(1.) + x*x))/x);
|
|
}
|
|
|
|
// Other functions
|
|
template<typename Scalar> Scalar exp10(const Scalar & x) {
|
|
return exp(x*log(Scalar(10.)));
|
|
}
|
|
|
|
template<typename Scalar> Scalar sign(const Scalar & x) {
|
|
return (x >= Scalar(0.)) ? ((x > Scalar(0.)) ? Scalar(1.) : Scalar(0.)) : Scalar(-1.);
|
|
}
|
|
|
|
template<typename Scalar> Scalar heaviside(const Scalar & x) {
|
|
return Scalar(x >= Scalar(0.));
|
|
}
|
|
|
|
template<typename Scalar> Scalar abs(const Scalar & x) {
|
|
return (x >= Scalar(0.)) ? x : -x;
|
|
}
|
|
|
|
#endif
|