diff --git a/Dual_Numbers.py b/Dual_Numbers.py
index fca7aad801d7e29266a52a0ec1fa0086fe010ebf..14aa972e5abb203f210807b49387a98ee6ec32d3 100644
--- a/Dual_Numbers.py
+++ b/Dual_Numbers.py
@@ -187,11 +187,22 @@ def test():
     print(f"(a / b) * c = {a / b * c}")
 
 
+def ex3():
+    u = Dual_Number(-2, 9)
+    v = Dual_Number(-22, 8)
+    w = Dual_Number(3, -1)
+    x = Dual_Number(9, -2)
+    y = Dual_Number(-8, 10)
+
+    print(f"v * ((u + w) / (x + y)) = {v * ((u + w) / (x + y))}")
+
+
 if __name__ == "__main__":
-    test()
+    # test()
     # Exercice1_a()
     # Exercice1_b()
     # Exercice1_c()
     # Exercice1_d()
     # Test_exp_sin()
     # sigmoid_exo()
+    ex3()
diff --git a/derive_and_min-max.py b/derive_and_min-max.py
index 42cb8803d33112448fbdec31c89e0b10b54c16dd..93479b36d62a403d5e11b7a39acb8bccc450ffc5 100644
--- a/derive_and_min-max.py
+++ b/derive_and_min-max.py
@@ -29,12 +29,13 @@ import numpy as np
 #     return g(Dual_Number(x, 1))
 
 
+# g(x) = x*x*exp( ln( x*x*x*x + 2 ) * sin(x) + 1 )
 def g(x: Dual_Number) -> float:
-    return (Dual_Number.exp((-1) * (x * x) / 7 + x + Dual_Number.sin(1.5 * x)) * Dual_Number.log(x * x + 2) - 7).d
+    return (x * x * Dual_Number.exp(Dual_Number.log(x * x * x * x + 2) * Dual_Number.sin(x) + 1)).d
 
 
 def h(x: Dual_Number) -> float:
-    return g(2 * x - 1)
+    return g(2 * x - 0)
 
 
 # def dgdx(x: float) -> float:
@@ -58,8 +59,8 @@ if __name__ == "__main__":
     # start = -5
     # stop = 9
 
-    start = 1.3
-    stop = 2.2
+    start = -1
+    stop = -0.8
     # start = 3.5
     # stop = 5.5
 
diff --git a/rf_methods.py b/rf_methods.py
index a6e5385c8c12ba5f48ecd857a9bb53b5e4d92057..4e8dabae7944561e2747f095b41c26f2fa606898 100644
--- a/rf_methods.py
+++ b/rf_methods.py
@@ -1,21 +1,22 @@
 import numpy as np
 from typing import Callable
+from Dual_Numbers import Dual_Number
 
 
 # def f(x: float) -> float:
 #     return x ** 4 + x ** 3 + x ** 2 - 1
 
 
-def g(x: float) -> float:
-    return x ** 2 - x - 1
-
-
-def h(x: float) -> float:
-    return x ** 2 - 25
-
-
-def z(x: float) -> float:
-    return x ** 3 - x ** 2 - 1
+# def g(x: float) -> float:
+#     return x ** 2 - x - 1
+#
+#
+# def h(x: float) -> float:
+#     return x ** 2 - 25
+#
+#
+# def z(x: float) -> float:
+#     return x ** 3 - x ** 2 - 1
 
 
 def rec_regula_falsi(start: float, stop: float, func: Callable[[float], float],
@@ -109,7 +110,6 @@ def iter_bisection(init_start: float, init_stop: float, func:
 
 def iter_newton_raphson(init_guess: float, f: Callable[[float], float],
                         dfdx: Callable[[float], float], debug: bool) -> float:
-
     prev = init_guess
     curr = init_guess
 
@@ -118,6 +118,7 @@ def iter_newton_raphson(init_guess: float, f: Callable[[float], float],
     while np.abs(f(curr)) > 1e-9:
         if debug:
             print(f"Iter = {iter}\tx = {curr}\tf(x) = {f(curr)}")
+
         curr = prev - f(prev) / dfdx(prev)
         prev = curr
         iter += 1
@@ -125,6 +126,23 @@ def iter_newton_raphson(init_guess: float, f: Callable[[float], float],
     return curr
 
 
+def iter_secant(x0: float, x1: float, f: Callable[[float], float],
+                debug: bool) -> float:
+    iter = 0
+
+    while np.abs(f(x1)) > 1e-9 or np.abs(x1 - x0) > 1e-9:
+        if debug:
+            print(f"Iter = {iter}\tx = {x1}\tf(x) = {f(x1)}")
+
+        x_tmp = x1 - (x1 - x0) / f(x1) - f(x0) * f(x1)
+        x0 = x1
+        x1 = x_tmp
+        # curr = prev - (f(prev) - f(curr) / (prev - curr)) * f(prev)
+        iter += 1
+
+    return x1
+
+
 if __name__ == "__main__":
     # print(f"Bissection = {bissect_method(0.5, 2, g)}")
     # print(f"Regula falsi = {regula_falsi(-3, 7, h)}")
@@ -135,10 +153,14 @@ if __name__ == "__main__":
     # print(f"Iter regula falsi= {iter_regula_falsi(0.5, 2, g, False)}")
     # print(f"Rec regula falsi = {rec_regula_falsi(0.5, 2, g, False)}")
 
-    def f(x):
-        return x ** 3 - 2 * x ** 2 + 1
+    def f(x: float) -> float:
+        return x ** 2 - 25
+
+    def f_Dual(x: Dual_Number) -> float:
+        return (x * x - 25).d
 
-    def fprime(x):
-        return 3 * x ** 2 - 4 * x + 1
+    def dfdx(x: float) -> float:
+        return f_Dual(Dual_Number(x, 1))
 
-    print(f"Newton = {iter_newton_raphson(0, f, fprime, True)}")
+    print(f"Newton = {iter_newton_raphson(1, f, dfdx, True)}")
+    print(f"Secant = {iter_secant(4.4, 5.3, f, True)}")
diff --git a/serie_taylor/revision_part_b.py b/serie_taylor/revision_part_b.py
index cd4123a924ce6c76b4ab43705835569ba11da150..699fe530f446814a0c6311deae264b27d3f64485 100644
--- a/serie_taylor/revision_part_b.py
+++ b/serie_taylor/revision_part_b.py
@@ -2,55 +2,67 @@ import numpy as np
 import math
 import matplotlib.pyplot as plt
 from rf_methods import iter_bisection, iter_regula_falsi
+from Dual_Numbers import Dual_Number
 
 
 def f(x: float) -> float:
-    return np.sin(x) + np.exp(-x) / 10
+    # return np.sin(x) + np.exp(-x) / 10
+    return np.sinh(x) - np.cos(x)
 
 
 def f1(x: float) -> float:
-    return np.cos(x) - np.exp(-x) / 10
+    # return np.cos(x) - np.exp(-x) / 10
+    return np.cosh(x) + np.sin(x)
 
 
 def f2(x: float) -> float:
-    return -np.sin(x) + np.exp(-x) / 10
+    # return -np.sin(x) + np.exp(-x) / 10
+    return np.sinh(x) + np.cos(x)
 
 
 def f3(x: float) -> float:
-    return -np.cos(x) - np.exp(-x) / 10
+    # return -np.cos(x) - np.exp(-x) / 10
+    return np.cosh(x) - np.sin(x)
 
 
 def f4(x: float) -> float:
-    return np.sin(x) + np.exp(-x) / 10
+    # return np.sin(x) + np.exp(-x) / 10
+    return np.sinh(x) - np.cos(x)
 
 
 def f5(x: float) -> float:
-    return np.cos(x) + np.exp(-x) / 10
+    # return np.cos(x) + np.exp(-x) / 10
+    return np.cosh(x) + np.sin(x)
+
+
+def f6(x: float) -> float:
+    # return np.cos(x) + np.exp(-x) / 10
+    return np.sinh(x) + np.cos(x)
 
 
 def T(x: float, a: float) -> float:
-    return (f(a) / math.factorial(0) * pow(x - a, 0)) + (f1(a) / math.factorial(1) * pow(x - a, 1)) + (f2(a) / math.factorial(2) * pow(x - a, 2)) + (f3(a) / math.factorial(3) * pow(x - a, 3)) + (f4(a) / math.factorial(4) * pow(x - a, 4)) + (f5(a) / math.factorial(5) * pow(x - a, 5))
+    return (f(a) / math.factorial(0) * pow(x - a, 0)) + (f1(a) / math.factorial(1) * pow(x - a, 1)) + (f2(a) / math.factorial(2) * pow(x - a, 2)) + (f3(a) / math.factorial(3) * pow(x - a, 3)) + (f4(a) / math.factorial(4) * pow(x - a, 4)) + (f5(a) / math.factorial(5) * pow(x - a, 5)) + (f6(a) / math.factorial(6) * pow(x - a, 6))
 
 
 if __name__ == "__main__":
-    x_eval_point = 2
-    start = -5
-    stop = 9
+    x_eval_point = 1
+    start = -3
+    stop = 3
     x_axis = np.arange(start, stop, 0.01)
     y_eval_point = f(x_eval_point)
 
-    print(f"Zéros de la fonction f = {iter_bisection(-4, -2, f, True)}")
+    print(f"Zéros de la fonction f = {iter_bisection(start, stop, f, True)}")
 
     plt.figure(figsize=(8, 6))
     plt.xlim(start, stop)
     plt.ylim(-5, 5)
-    plt.plot(x_axis, f(x_axis), label='f(x) = sin(x) + exp(-x) / 10')
+    plt.plot(x_axis, f(x_axis), label='g(t) = sinh(t) - cos(t)')
     plt.plot(x_axis, T(x_axis, x_eval_point),
-             label='Polynôme de Taylor de degré 5')
+             label='Polynôme de Taylor de degré 6')
     plt.plot(x_eval_point, y_eval_point, marker="o", markerfacecolor="purple")
     plt.legend()
     plt.xlabel('x')
     plt.ylabel('y')
-    plt.title('Polynôme de Taylor de degré 5 pour f(x)')
+    plt.title('Polynôme de Taylor de degré 6 pour g(t)')
     plt.grid(True)
     plt.show()
diff --git a/serie_taylor/rf_methods.py b/serie_taylor/rf_methods.py
index e2409e4131a48e98c181b4620bd20feafa6a0fa0..bd4933182fdfaf7ba279f645bc169df0a37e0909 100644
--- a/serie_taylor/rf_methods.py
+++ b/serie_taylor/rf_methods.py
@@ -91,7 +91,7 @@ def iter_bisection(init_start: float, init_stop: float, func:
 
     iter = 0
 
-    while np.abs(stop - start) > 1e-5:
+    while np.abs(stop - start) > 1e-8:
         if debug:
             print(f"Iter = {iter}\tx = {cN}\tf(x) = {func(cN)}")