# %% Imports & Constants
import numpy as np
import matplotlib.pyplot as plt


## Dérivation par schéma arrière - Version avec pas variable

def derivation_arriere(X, Y, pas=1):
    # à compléter en modifiant la version précédente

    return X[pas:], dfdx


# %% Ajout de bruit de mesure et influence sur la dérivation
if __name__ == "__main__":

    xp = np.linspace(0.1, 5, 10000)
    f = lambda x: np.log(x / 4) / x + x**2
    df = lambda x: (1 - np.log(x / 4)) / x**2 + 2 * x
    dfxp = df(xp)
    a = 1e-1
    b = 5

    X = np.load() # à compléter
    Y = np.load() # à compléter

    for pas in []: # à compléter
        Xp, Yp = derivation_arriere()  # à compléter
        plt.figure()
        plt.plot(X, Y, label=r"Fonction $f(x)$ bruitée")
        plt.plot(xp, dfxp, label="Dérivée théorique", linestyle="--")
        plt.plot(Xp, Yp, label="Dérivée numérique")
        plt.plot([a, b], [0, 0], "k--")
        plt.xlabel(r"abscisses : $x$", fontsize=13)
        plt.ylabel(r"ordonnées :  $f(x)$ et $f'(x)$", fontsize=13)
        plt.title(f"Dérivation numérique avec bruit de mesure, pas={pas}", fontsize=13)
        plt.xlim(a, b)
        plt.ylim(f(a), f(b))
        plt.grid()
        plt.legend()


# %%
