From 6eb77df9b7a53a98332235575a2461c1b3aa5349 Mon Sep 17 00:00:00 2001 From: "iliya.saroukha" <iliya.saroukhanian@etu.hesge.ch> Date: Tue, 25 Jun 2024 17:08:31 +0200 Subject: [PATCH] fix: renamed functions --- ISC_421_Controle_4_Saroukhanian_Iliya.py | 70 ++++++++++++++++++------ 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/ISC_421_Controle_4_Saroukhanian_Iliya.py b/ISC_421_Controle_4_Saroukhanian_Iliya.py index 8f9aa3c..a001bbe 100644 --- a/ISC_421_Controle_4_Saroukhanian_Iliya.py +++ b/ISC_421_Controle_4_Saroukhanian_Iliya.py @@ -156,28 +156,28 @@ print(f"valeur de la fonction en a et b: {SD.f(SD.a), SD.f(SD.b)}") ########################################################################### -def taylor_err_max(plot_range, eval_pt): +def errmax_taylor(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(): +def plot_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]) + err_y0 = errmax_taylor(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]) + err_y1 = errmax_taylor(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]) + err_y2 = errmax_taylor(t, SD.Taylor_points[2]) fig, axs = plt.subplots(2, 2, figsize=(18, 12)) @@ -225,7 +225,7 @@ def ex2_taylor_poly(): plt.show() -def polerr(nb_points, interpolation_pts, plot_range): +def errmax_poly_interpolation(nb_points, interpolation_pts, plot_range): errs_range = [] for pt in plot_range: @@ -247,7 +247,7 @@ def chebyshev_pts(start, stop, nb_points): np.cos(((2 * np.arange(nb_points) + 1) * np.pi) / (2 * (nb_points)))) -def ex3_lagrange_interpolation_poly(): +def plot_lagrange_poly(): nb_points = np.linspace(1, 12, 6, dtype=np.uint8) fig, axes = plt.subplots(2, 3, figsize=(20, 12)) @@ -262,33 +262,67 @@ def ex3_lagrange_interpolation_poly(): l_poly_chebyshev_pts = lagrange( cheb_pts, SD.f(cheb_pts)) - uniform_err = polerr(nb_points[i], interpolate_pts, 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', label='$L_{f}$, intervalle équidistants') # 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='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(interpolate_pts, SD.f(interpolate_pts), 'o', color='red', + label='Points équidistants') + ax.plot(cheb_pts, SD.f(cheb_pts), 'o', color='blue', + label='Points de Chebyshev') + ax.set_title(f'n = {nb_points[i]}') + ax.set_ylim([-1.2, 1.2]) + + ax.legend() + + fig.suptitle(f'Polynômes d\'interpolation de Lagrange de $f$ avec 2 subdivisions différentes d\'intervalle: Équidistantes (rouge) / Points de Chebyshev (bleu)') + + fig.tight_layout() + plt.show() + + +def plot_errmax_interpolation(): + nb_points = np.linspace(1, 12, 6, dtype=np.uint8) + fig, axes = plt.subplots(2, 3, figsize=(20, 12)) + + t = np.linspace(SD.a, SD.b, Nmbre_pts) + + for i, ax in enumerate(axes.flat): + 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( + cheb_pts, SD.f(cheb_pts)) + + uniform_err = errmax_poly_interpolation( + nb_points[i], interpolate_pts, t) + chebyshev_err = errmax_poly_interpolation(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', + label='$L_{f}$, intervalle équidistants') + ax.plot(t, uniform_err, '--', color='red', + 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, chebyshev_err, '--', color='blue', label='ErrMax de $L_{f}$, points de Chebyshev') ax.plot(interpolate_pts, SD.f(interpolate_pts), 'o', color='red', label='Points équidistants') - ax.plot(cheb_pts[::-1], - SD.f(cheb_pts[::-1]), 'o', color='blue', + ax.plot(cheb_pts, SD.f(cheb_pts), 'o', color='blue', label='Points de Chebyshev') ax.set_title(f'n = {nb_points[i]}') - # ax.set_ylim([-1.2, 1.2]) ax.legend() - fig.suptitle(f'Polynôme d\'interpolation de Lagrange de $f$ avec 2 subdivisions différentes d\'intervalle: Équidistantes (rouge) / Points de Chebyshev (bleu)') + fig.suptitle(f'Erreur maximale théorique lors de l\'interpolation de $f$ avec 2 subdivisions différentes d\'intervalle: Équidistantes (rouge) / Points de Chebyshev (bleu)') fig.tight_layout() plt.show() @@ -299,7 +333,9 @@ def ex3_lagrange_interpolation_poly(): # ex2_taylor_poly() -ex3_lagrange_interpolation_poly() +# plot_taylor_poly() +plot_lagrange_poly() +# plot_errmax_interpolation() # def ex3_newton_interpolation_poly(): -- GitLab