diff --git a/ISC_421_Controle_4_Saroukhanian_Iliya.py b/ISC_421_Controle_4_Saroukhanian_Iliya.py index 3c862c43165c64240e08587adcfe38f6839eab8f..8f9aa3c32724e8528bc1cbcc781b6a14c3f77a38 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():