diff --git a/Dual_Numbers.py b/Dual_Numbers.py index 93348fffcb3f751d7682ada98e8091544cd9b737..fca7aad801d7e29266a52a0ec1fa0086fe010ebf 100644 --- a/Dual_Numbers.py +++ b/Dual_Numbers.py @@ -79,7 +79,7 @@ class Dual_Number: b2 = b # Fin de la partie pour assurer la compatibilité entre int/float et Dual_Numbers - return Dual_Number(real=a.r * b.r, dual=a.r * b.d + a.d * b.r) + return Dual_Number(real=a.r * b2.r, dual=a.r * b2.d + a.d * b2.r) # multiplication a.__rmul__(b) __rmul__ = __mul__ @@ -103,13 +103,38 @@ class Dual_Number: return Dual_Number.mult_inverse(a) * b def exp(a): - return Dual_Number(np.exp(a.r), np.exp(a.r) * a.d) + if type(a) in [int, float]: + a2 = Dual_Number(real=a, dual=0) + else: + a2 = a + return Dual_Number(real=np.exp(a2.r), dual=(np.exp(a2.r) * a2.d)) def sin(a): - return Dual_Number(np.sin(a.r), np.cos(a.r) * a.d) + if type(a) in [int, float]: + a2 = Dual_Number(real=a, dual=0) + else: + a2 = a + return Dual_Number(real=(np.sin(a2.r)), dual=(np.cos(a2.r) * a2.d)) def cos(a): - return Dual_Number(np.cos(a.r), -np.sin(a.r) * a.d) + if type(a) in [int, float]: + a2 = Dual_Number(real=a, dual=0) + else: + a2 = a + return Dual_Number(real=(np.cos(a2.r)), dual=(-np.sin(a2.r) * a2.d)) + + def log(a): + """ + Natural log (ln) + + Returns: + + """ + if type(a) in [int, float]: + a2 = Dual_Number(real=a, dual=0) + else: + a2 = a + return Dual_Number(real=(np.log(a2.r)), dual=((1 / a2.r) * a2.d)) def Exercice1_a(): @@ -154,10 +179,19 @@ def sigmoid_exo(): [print(f"Sigmoid de {i} = {sigmoid(i)}") for i in range(10)] +def test(): + a = Dual_Number(2, 1) + b = Dual_Number(2, -1) + c = Dual_Number(1, 2) + + print(f"(a / b) * c = {a / b * c}") + + if __name__ == "__main__": - Exercice1_a() - Exercice1_b() - Exercice1_c() - Exercice1_d() - Test_exp_sin() - sigmoid_exo() + test() + # Exercice1_a() + # Exercice1_b() + # Exercice1_c() + # Exercice1_d() + # Test_exp_sin() + # sigmoid_exo()