Illustration des différents schemas pour la dérivation numérique



Code le plus simple possible et donc pas modulable du tout

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""
Différences finies centrées, ordre 02 en h.
Mise en évidence des erreurs de troncature et d'arrondis.
"""
from math import sin, cos

def df(x):
    return cos(x)


def err_centree(x, f, df, h):
    return abs(df(x) - (f(x + h / 2) - f(x - h / 2)) / h)


def err_progressive(x, f, df, h):
    return abs(df(x) - (f(x + h) - f(x)) / h)


def err_retrograde(x, f, df, h):
    return abs(df(x) - (f(x) - f(x - h)) / h)


def main():
    f = lambda x: sin(x)   # Fonction étudiée
    df = lambda x: cos(x)  # Fonction dérivée de la fonction étudiée
    x0 = 1                 # Point où le nombre dérivé est calculé
    hs = [1 / (10**i) for i in range(1, 15)]  # Liste des pas h

    print(
        "h \t\t Diff. finies Prog.   Diff. finies Retro.   Diff. finies centrées"
    )
    for h in hs:
        print("{:.1e} \t  {:.4e} \t  {:.4e} \t  {:.4e}".format(
            h, err_progressive(x0, f, df, h), err_retrograde(x0, f, df, h),
            err_centree(x0, f, df, h)))


main()