"""
""" #! /usr/bin/python3 # -*- coding: utf-8 -*- # lettres accentuées interdites (sauf dans les commentaires et les chaînes de caractères) doc = """ # intérêt de ce programme : didactique # objet : précision de la dérivée selon dx = h # calcul d'une dérivée : f' = df/dx # f'(x) = limite (f(x+h) - f(x)) / h quand h -> 0 # ou, pour davantage de pécision : # f'(x) = limite (f(x+h) - f(x-h)) / (2 h) quand h -> 0 (forme symétrique autour de x) # on diminue h de 0.1 à 1.e-15 et on compare le taux d'accroissement avec la dérivée # quand h est trop petit, les erreurs d'arrondi deviennent trop importantes # conclusion : # la précision machine est "1e-15", le h optimum est "1e-5" ou "1e-6" # il dépend de la rapidité de variation de la fonction. """ from math import pi, sin, cos, exp, log print("### Estimation de la dérivée f' par : f'(a) = (f(a+h) - f(a-h)) / (2 h)") puissance10 = lambda x : x**10 exp10 = lambda x : 10**x parabole = lambda x : x**2 inverse = lambda x : 1 / float(x) inverse_carre = lambda x : 1 / float(x*x) def cube(x) : # x^3 y = x * x * x return y def derivee(f, a, cible, commentaire="") : print(f"### début de derivee({commentaire})") print(f" {' h':5s} → f'({a})") (imin, ecart_min) = (0, a) for i in range(1, 10) : h = pow(10,-i) dx = 2 * h df = f(a+h) - f(a-h) f_prime = df / dx if abs(f_prime - cible) < ecart_min : imin = i ecart_min = abs(f_prime - cible) print(f" {h:5.0e} → {f_prime}") # bilan : meilleure approximation de f'(a) print(f" meilleure approximation de f'({a}) pour h=1e-{imin:1}") return # f(x) = x^3 -> dérivée f'(x) = 3 x^2 ; pour x=2 : f'(2) = 12 # meilleur résultat pour h = 1e-5 derivee(cube, 2, 12, "cube(x) = x^3 -> dérivée cube'(2) = 3 x^2 = 12") # sin'(2*pi) = cos(2*pi) = 1 # meilleur résultat pour h = 1e-5 derivee(sin, 2*pi, 1, "sin'(2*pi) = cos(2*pi) = 1") # (1/x)' = -1/x^2 : pour x=2 : -1/4 # meilleur résultat pour h = 1e-5 derivee(inverse, 2, -1/4, "(1/x)' = -1/x^2 : pour x=2 : -1/4") print("# Conclusion : meilleures dérivées pour h=1e-5 pour des fonctions 'douces'") print("# derivees.py terminé") """"""