Mathématiques en seconde générale et technologique – Algorithmes

Approximation d'un extremum

Pour une fonction dont le tableau de variations est donné, algorithmes d'approximation numérique d'un extremum (balayage, dichotomie).

Balayage

def maximum(f, a, b, n) :
    pas = (b - a) / n
    x = a
    m = x
    for i in range(n) :
        x += pas
        if f(x) > f(m) :
            m = x
    return m, f(m)

def run(f, a, b, n) :
    x, fx = maximum(f, a, b, n)
    print("Le maximum de f sur [{}; {}] est approximativement f({}) ≈ {}."
               .format(a, b, x, fx))
    
run(lambda x : -1/3 * x ** 3 + 2 * x, 1, 2, 1000000)
from math import sqrt
print(sqrt(2))
Le maximum de f sur [1; 2] est approximativement f(1.414213999965924) ≈ 1.885618083163856.
1.4142135623730951

Dichotomie

def maximum(f, a, b) :
    while abs((b - a) / a) > 1e-15 :
        m = (a + b) / 2
        if f(a) > f(b) :
            b = m
        else :
            a = m
    return a, f(a)

def run(f, a, b) :
    x, fx = maximum(f, a, b)
    print("Le maximum de f sur [{}; {}] est approximativement f({}) ≈ {}."
               .format(a, b, x, fx))
    
run(lambda x : -1/3 * x ** 3 + 2 * x, 1, 2)
from math import sqrt
print(sqrt(2))
Le maximum de f sur [1; 2] est approximativement f(1.4142135679721823) ≈ 1.8856180831641267.
1.4142135623730951
Lionel Avon