7#ifndef THEORETICA_MULTIDUAL_FUNCTIONS_H
8#define THEORETICA_MULTIDUAL_FUNCTIONS_H
11#include "../core/real_analysis.h"
18 template<
unsigned int N>
19 multidual<N>
square(multidual<N> x) {
25 template<
unsigned int N>
26 multidual<N>
cube(multidual<N> x) {
32 template<
unsigned int N>
39 template<
unsigned int N>
40 multidual<N>
pow(multidual<N> x,
int n) {
42 return multidual<N>(pow_n_1_x * x.
Re(), x.
Dual() * pow_n_1_x * n);
47 template<
unsigned int N>
48 multidual<N>
sqrt(multidual<N> x) {
54 return multidual<N>(
nan(), vec<real, N>(
nan()));
57 return multidual<N>(sqrt_x, x.
Dual() * 0.5 / sqrt_x);
62 template<
unsigned int N>
63 multidual<N>
sin(multidual<N> x) {
69 template<
unsigned int N>
70 multidual<N>
cos(multidual<N> x) {
76 template<
unsigned int N>
77 multidual<N>
tan(multidual<N> x) {
83 return multidual<N>(
nan(), vec<real, N>(
nan()));
91 template<
unsigned int N>
92 multidual<N>
cot(multidual<N> x) {
98 return multidual<N>(
nan(), vec<real, N>(
nan()));
106 template<
unsigned int N>
107 multidual<N>
exp(multidual<N> x) {
109 return multidual<N>(exp_x, x.
Dual() * exp_x);
114 template<
unsigned int N>
115 multidual<N>
ln(multidual<N> x) {
119 return multidual<N>(
nan(), vec<real, N>(
nan()));
122 return multidual<N>(
ln(x.
Re()), x.
Dual() / x.
Re());
127 template<
unsigned int N>
128 multidual<N>
log2(multidual<N> x) {
132 return multidual<N>(
nan(), vec<real, N>(
nan()));
140 template<
unsigned int N>
141 multidual<N>
log10(multidual<N> x) {
145 return multidual<N>(
nan(), vec<real, N>(
nan()));
153 template<
unsigned int N>
154 multidual<N>
abs(multidual<N> x) {
160 template<
unsigned int N>
161 multidual<N>
asin(multidual<N> x) {
165 return multidual<N>(
nan(), vec<real, N>(
nan()));
173 template<
unsigned int N>
174 multidual<N>
acos(multidual<N> x) {
178 return multidual<N>(
nan(), vec<real, N>(
nan()));
185 template<
unsigned int N>
186 multidual<N>
atan(multidual<N> x) {
192 template<
unsigned int N>
193 multidual<N>
sinh(multidual<N> x) {
196 return multidual<N>((exp_x - 1.0 / exp_x) / 2.0, x.
Dual() * (exp_x + 1.0 / exp_x) / 2.0);
201 template<
unsigned int N>
202 multidual<N>
cosh(multidual<N> x) {
205 return multidual<N>((exp_x + 1.0 / exp_x) / 2.0, x.
Dual() * (exp_x - 1.0 / exp_x) / 2.0);
210 template<
unsigned int N>
211 multidual<N>
tanh(multidual<N> x) {
215 (exp_x - 1.0 / exp_x) / (exp_x + 1.0 / exp_x),
vec< real, N > Dual() const
Get the multidual part.
Definition multidual.h:79
real Re() const
Get the real part.
Definition multidual.h:67
multidual conjugate() const
Get the multidual conjugate.
Definition multidual.h:107
#define TH_MATH_ERROR(F_NAME, VALUE, EXCEPTION)
TH_MATH_ERROR is a macro which throws exceptions or modifies errno (depending on which compiling opti...
Definition error.h:225
Main namespace of the library which contains all functions and objects.
Definition algebra.h:27
double real
A real number, defined as a floating point type.
Definition constants.h:198
dual2 sqrt(dual2 x)
Compute the square root of a second order dual number.
Definition dual2_functions.h:54
dual cosh(dual x)
Compute the hyperbolic cosine of a dual number.
Definition dual_functions.h:205
dual2 ln(dual2 x)
Compute the natural logarithm of a second order dual number.
Definition dual2_functions.h:151
dual sinh(dual x)
Compute the hyperbolic sine of a dual number.
Definition dual_functions.h:194
dual2 abs(dual2 x)
Compute the absolute value of a second order dual number.
Definition dual2_functions.h:198
dual2 log2(dual2 x)
Compute the natural logarithm of a second order dual number.
Definition dual2_functions.h:166
dual2 asin(dual2 x)
Compute the arcsine of a second order dual number.
Definition dual2_functions.h:204
dual2 exp(dual2 x)
Compute the exponential of a second order dual number.
Definition dual2_functions.h:138
dual2 log10(dual2 x)
Compute the natural logarithm of a second order dual number.
Definition dual2_functions.h:182
dual2 conjugate(dual2 x)
Return the conjugate of a second order dual number.
Definition dual2_functions.h:35
constexpr real LOG10E
The base-10 logarithm of e.
Definition constants.h:246
constexpr real LOG2E
The binary logarithm of e.
Definition constants.h:240
TH_CONSTEXPR real nan()
Return a quiet NaN number in floating point representation.
Definition error.h:54
dual2 cos(dual2 x)
Compute the cosine of a second order dual number.
Definition dual2_functions.h:86
dual2 cot(dual2 x)
Compute the cotangent of a second order dual number.
Definition dual2_functions.h:119
dual2 tan(dual2 x)
Compute the tangent of a second order dual number.
Definition dual2_functions.h:100
dual2 acos(dual2 x)
Compute the arcosine of a second order dual number.
Definition dual2_functions.h:223
int sgn(real x)
Return the sign of x (1 if positive, -1 if negative, 0 if null)
Definition real_analysis.h:259
dual2 sin(dual2 x)
Compute the sine of a second order dual number.
Definition dual2_functions.h:72
dual2 square(dual2 x)
Return the square of a second order dual number.
Definition dual2_functions.h:23
dual2 atan(dual2 x)
Compute the arctangent of a second order dual number.
Definition dual2_functions.h:242
dual tanh(dual x)
Compute the hyperbolic tangent of a dual number.
Definition dual_functions.h:216
dual2 pow(dual2 x, int n)
Compute the n-th power of a second order dual number.
Definition dual2_functions.h:41
dual2 cube(dual2 x)
Return the cube of a second order dual number.
Definition dual2_functions.h:29