From 374d8cdedeee28335ac59a31f105d7879d44cffa Mon Sep 17 00:00:00 2001
From: "iliya.saroukha" <iliya.saroukhanian@etu.hesge.ch>
Date: Tue, 25 Jun 2024 15:27:50 +0200
Subject: [PATCH] feat: wrote taylor_errmax and updated chebyshev_points
 function

---
 ISC_421_Controle_4_Saroukhanian_Iliya.py | 48 +++++++++++++++++-------
 1 file changed, 34 insertions(+), 14 deletions(-)

diff --git a/ISC_421_Controle_4_Saroukhanian_Iliya.py b/ISC_421_Controle_4_Saroukhanian_Iliya.py
index 3c862c4..8f9aa3c 100644
--- a/ISC_421_Controle_4_Saroukhanian_Iliya.py
+++ b/ISC_421_Controle_4_Saroukhanian_Iliya.py
@@ -155,17 +155,30 @@ print(f"valeur de la fonction en a et b:  {SD.f(SD.a), SD.f(SD.b)}")
 #### Exercices #####
 ###########################################################################
 
+
+def taylor_err_max(plot_range, eval_pt):
+    return (SD.Maximal_derivatives_values[len(SD.Maximal_derivatives_values) - 1] /
+            math.factorial(len(SD.Maximal_derivatives_values) + 1)) * \
+        (plot_range - eval_pt)**(len(SD.Maximal_derivatives_values) + 1)
+
+
 def ex2_taylor_poly():
     t = np.linspace(SD.a, SD.b, Nmbre_pts)
     y0 = compute_taylor_series(
         t, SD.Taylor_points[0], SD.Taylor_derivatives_values[SD.Taylor_points[0]])
 
+    err_y0 = taylor_err_max(t, SD.Taylor_points[0])
+
     y1 = compute_taylor_series(
         t, SD.Taylor_points[1], SD.Taylor_derivatives_values[SD.Taylor_points[1]])
 
+    err_y1 = taylor_err_max(t, SD.Taylor_points[1])
+
     y2 = compute_taylor_series(
         t, SD.Taylor_points[2], SD.Taylor_derivatives_values[SD.Taylor_points[2]])
 
+    err_y2 = taylor_err_max(t, SD.Taylor_points[2])
+
     fig, axs = plt.subplots(2, 2, figsize=(18, 12))
 
     axs[0, 0].plot(t, SD.f(t), color='black')
@@ -174,6 +187,8 @@ def ex2_taylor_poly():
 
     axs[0, 1].plot(t, SD.f(t), color='black', label='$f$')
     axs[0, 1].plot(t, y0, color='orange', label='$T_{f}$')
+    axs[0, 1].plot(t, err_y0, '--', color='orange',
+                   label='Erreur maximal de $T_{f}$')
     axs[0, 1].plot(SD.Taylor_points[0], SD.f(
         SD.Taylor_points[0]), "-o", color='red', label=f'a = {SD.Taylor_points[0]}')
     axs[0, 1].set_title(
@@ -184,6 +199,8 @@ def ex2_taylor_poly():
 
     axs[1, 0].plot(t, SD.f(t), color='black', label='$f$')
     axs[1, 0].plot(t, y1, color='blue', label='$T_{f}$')
+    axs[1, 0].plot(t, err_y1, '--', color='blue',
+                   label='ErrMax de $T_{f}$')
     axs[1, 0].plot(SD.Taylor_points[1], SD.f(
         SD.Taylor_points[1]), "-o", color='red', label=f'a = {SD.Taylor_points[1]}')
     axs[1, 0].set_title(
@@ -194,6 +211,8 @@ def ex2_taylor_poly():
 
     axs[1, 1].plot(t, SD.f(t), color='black', label='$f$')
     axs[1, 1].plot(t, y2, color='violet', label='$T_{f}$')
+    axs[1, 1].plot(t, err_y2, '--', color='violet',
+                   label='ErrMax de $T_{f}$')
     axs[1, 1].plot(SD.Taylor_points[2], SD.f(
         SD.Taylor_points[2]), "-o", color='red', label=f'a = {SD.Taylor_points[2]}')
     axs[1, 1].set_title(
@@ -223,6 +242,11 @@ def polerr(nb_points, interpolation_pts, plot_range):
     return errs_range
 
 
+def chebyshev_pts(start, stop, nb_points):
+    return (((start + stop) / 2) + ((stop - start) / 2) *
+            np.cos(((2 * np.arange(nb_points) + 1) * np.pi) / (2 * (nb_points))))
+
+
 def ex3_lagrange_interpolation_poly():
     nb_points = np.linspace(1, 12, 6, dtype=np.uint8)
     fig, axes = plt.subplots(2, 3, figsize=(20, 12))
@@ -230,20 +254,16 @@ def ex3_lagrange_interpolation_poly():
     t = np.linspace(SD.a, SD.b, Nmbre_pts)
 
     for i, ax in enumerate(axes.flat):
-        chebyshev_points = np.cos(
-            (2 * np.arange(nb_points[i]) + 1) / (2 * nb_points[i]) * np.pi)
-
-        chebyshev_points_mapped = 0.5 * \
-            (SD.b - SD.a) * (chebyshev_points + 1) + SD.a
+        cheb_pts = chebyshev_pts(SD.a, SD.b, nb_points[i])
 
         interpolate_pts = np.linspace(SD.a, SD.b, nb_points[i])
 
         l_poly_uniform = lagrange(interpolate_pts, SD.f(interpolate_pts))
         l_poly_chebyshev_pts = lagrange(
-            chebyshev_points_mapped, SD.f(chebyshev_points_mapped))
+            cheb_pts, SD.f(cheb_pts))
 
         uniform_err = polerr(nb_points[i], interpolate_pts, t)
-        chebyshev_err = polerr(nb_points[i], chebyshev_points_mapped, t)
+        chebyshev_err = polerr(nb_points[i], cheb_pts, t)
 
         ax.plot(t, SD.f(t), color='black', label='f')
         ax.plot(t, l_poly_uniform(t), color='red',
@@ -251,17 +271,17 @@ def ex3_lagrange_interpolation_poly():
         # ax.plot(t, np.abs(SD.f(t) - l_poly_uniform(t)), '--', color='red',
         #         label='$L_{f}$, intervalle équidistants, erreur')
         ax.plot(t, uniform_err, '--', color='red',
-                label='$L_{f}$, intervalle équidistants, erreur')
+                label='ErrMax de $L_{f}$, intervalle équidistants')
         ax.plot(t, l_poly_chebyshev_pts(t), color='blue',
                 label='$L_{f}$, points de Chebyshev')
         # ax.plot(t, np.abs(SD.f(t) - l_poly_chebyshev_pts(t)), '--', color='blue',
         #         label='$L_{f}$, points de Chebyshev, erreur')
         ax.plot(t, chebyshev_err, '--', color='blue',
-                label='$L_{f}$, points de Chebyshev, erreur')
+                label='ErrMax de $L_{f}$, points de Chebyshev')
         ax.plot(interpolate_pts, SD.f(interpolate_pts), 'o', color='red',
                 label='Points équidistants')
-        ax.plot(chebyshev_points_mapped[::-1],
-                SD.f(chebyshev_points_mapped[::-1]), 'o', color='blue',
+        ax.plot(cheb_pts[::-1],
+                SD.f(cheb_pts[::-1]), 'o', color='blue',
                 label='Points de Chebyshev')
         ax.set_title(f'n = {nb_points[i]}')
         # ax.set_ylim([-1.2, 1.2])
@@ -274,12 +294,12 @@ def ex3_lagrange_interpolation_poly():
     plt.show()
 
 
-def caca():
-    print(len(SD.Maximal_derivatives_values))
+# def caca():
+#     print(len(SD.Maximal_derivatives_values))
 
 
+# ex2_taylor_poly()
 ex3_lagrange_interpolation_poly()
-# caca()
 
 
 # def ex3_newton_interpolation_poly():
-- 
GitLab