Coverage for Adifpy/differentiate/elementary_functions.py: 54%
28 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-22 19:44 -0500
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-22 19:44 -0500
1"""Elementary functions for Dual Numbers, to be used by the user in passed-in functions"""
3import numpy as np
5from Adifpy.differentiate.dual_number import DualNumber
8def exp(self: DualNumber):
9 """Exponential function e^x"""
10 return DualNumber(np.exp(self.real),
11 np.exp(self.real) * self.dual)
13# Trigonometric Functions
14def sin(self: DualNumber):
15 return DualNumber(np.sin(self.real),
16 np.cos(self.real) * self.dual)
18def cos(self: DualNumber):
19 return DualNumber(np.cos(self.real),
20 -np.sin(self.real) * self.dual)
22def tan(self: DualNumber):
23 return DualNumber(np.tan(self.real),
24 (1 / pow(np.cos(self.real), 2)) * self.dual)
26# Inverse Trigonometric Functions
27def arcsin(self: DualNumber):
28 return DualNumber(np.arcsin(self.real),
29 pow(1 - pow(self.real,2), -1 / 2) * self.dual)
31def arccos(self: DualNumber):
32 return DualNumber(np.arccos(self.real),
33 -pow(1 - pow(self.real,2), -1 / 2)) * self.dual
35def arctan(self: DualNumber):
36 return DualNumber(np.arctan(self.real),
37 1 / (1 + pow(self.real, 2)) * self.dual)
39# Hyperbolic Trigonometric Functions
40def sinh(self: DualNumber):
41 return DualNumber(np.sinh(self.real),
42 np.cosh(self.real) * self.dual)
44def cosh(self: DualNumber):
45 return DualNumber(np.cosh(self.real),
46 np.sinh(self.real) * self.dual)
48def tanh(self: DualNumber):
49 return DualNumber(np.tanh(self.real),
50 1 - pow(np.tanh(self.real), 2) * self.dual)
52# Inverse Hyperbolic Trigonometric Functions
53def arcsinh(self):
54 return DualNumber(np.arcsinh(self.real),
55 pow(pow(self.real,2) + 1, -1 / 2) * self.dual)
57def arccosh(self):
58 return DualNumber(np.arccosh(self.real),
59 pow(pow(self.real,2) - 1, -1 / 2) * self.dual)
61def arctanh(self):
62 return DualNumber(np.arctanh(self.real),
63 pow(1 - pow(self.real,2), -1) * self.dual)