diff --git a/ISC_421_Controle_4_Saroukhanian_Iliya.py b/ISC_421_Controle_4_Saroukhanian_Iliya.py index 10917343bed6abe857e85f49b762f2408fcd9143..ded5ac46edecc324d271fb75ae25126fcfd0097a 100644 --- a/ISC_421_Controle_4_Saroukhanian_Iliya.py +++ b/ISC_421_Controle_4_Saroukhanian_Iliya.py @@ -2,6 +2,7 @@ import numpy as np import math from matplotlib import pyplot as plt from scipy.interpolate import lagrange +from numpy.polynomial.polynomial import Polynomial ############################################################################# @@ -152,7 +153,7 @@ print(f"valeur de la fonction en a et b: {SD.f(SD.a), SD.f(SD.b)}") #### Exercices ##### ########################################################################### -def ex2(): +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]]) @@ -203,7 +204,47 @@ def ex2(): plt.show() -ex2() +def ex3_interpolation_poly(): + nb_points = np.linspace(3, 19, 6, dtype=np.uint64) + fig, axes = plt.subplots(2, 3, figsize=(20, 12)) + + 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 + + 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)) + + t = np.linspace(SD.a, SD.b, Nmbre_pts) + + 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, l_poly_chebyshev_pts(t), color='blue', + label='$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', + 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.tight_layout() + plt.show() + + +ex3_interpolation_poly() # Graphique des polynômes de Taylor # fig, axes = plt.subplots(1, 3) diff --git a/figs/interpolate_lagrange_uniform.png b/figs/interpolate_lagrange_uniform.png new file mode 100644 index 0000000000000000000000000000000000000000..a56e963044fb19c1c9e68c074b47437e5ca933b7 Binary files /dev/null and b/figs/interpolate_lagrange_uniform.png differ diff --git a/figs/lagrange_interpolate.png b/figs/lagrange_interpolate.png new file mode 100644 index 0000000000000000000000000000000000000000..736355ef8e45a60defbec054861478beaa7fc832 Binary files /dev/null and b/figs/lagrange_interpolate.png differ