diff --git a/ISC_421_Controle_4_Saroukhanian_Iliya.py b/ISC_421_Controle_4_Saroukhanian_Iliya.py index 459460916b9f0f2a8632db73d925d3c882861219..3c862c43165c64240e08587adcfe38f6839eab8f 100644 --- a/ISC_421_Controle_4_Saroukhanian_Iliya.py +++ b/ISC_421_Controle_4_Saroukhanian_Iliya.py @@ -206,8 +206,25 @@ def ex2_taylor_poly(): plt.show() +def polerr(nb_points, interpolation_pts, plot_range): + errs_range = [] + + for pt in plot_range: + prod = 1 + + for inter_pt in interpolation_pts: + prod *= pt - inter_pt + + err = (SD.Maximal_derivatives_values[nb_points - 1] / + math.factorial(nb_points + 1)) * np.abs(prod) + + errs_range.append(err) + + return errs_range + + def ex3_lagrange_interpolation_poly(): - nb_points = np.linspace(1, 13, 6, dtype=np.uint64) + 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) @@ -225,14 +242,21 @@ def ex3_lagrange_interpolation_poly(): l_poly_chebyshev_pts = lagrange( chebyshev_points_mapped, SD.f(chebyshev_points_mapped)) + uniform_err = polerr(nb_points[i], interpolate_pts, t) + chebyshev_err = polerr(nb_points[i], chebyshev_points_mapped, 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', + # 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') 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', + # 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') ax.plot(interpolate_pts, SD.f(interpolate_pts), 'o', color='red', label='Points équidistants') @@ -240,7 +264,7 @@ def ex3_lagrange_interpolation_poly(): SD.f(chebyshev_points_mapped[::-1]), 'o', color='blue', label='Points de Chebyshev') ax.set_title(f'n = {nb_points[i]}') - ax.set_ylim([-1.2, 1.2]) + # ax.set_ylim([-1.2, 1.2]) ax.legend() @@ -250,7 +274,12 @@ def ex3_lagrange_interpolation_poly(): plt.show() +def caca(): + print(len(SD.Maximal_derivatives_values)) + + ex3_lagrange_interpolation_poly() +# caca() # def ex3_newton_interpolation_poly():