"""
"""
#! /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é")
"""
"""