In [1]:
from math import sqrt
In [2]:
def f(x):
    """
    Une fonction croissante sur [-10; 0] puis décroissante sur [0;10]
    """
    return -x*x
In [3]:
def g(x):
    """
    Une fonction croissante sur [-5; (1+sqrt(2))/2] 
    puis décroissante sur [(1+sqrt(2))/2;5]
    """
    return -x*x + (1+sqrt(2))*x - sqrt(2)
In [4]:
(1+sqrt(2))/2
Out[4]:
1.2071067811865475
In [5]:
def h(x):
    """
    fonction croissante sur [-2, 2/21]
    puis décroissante sur [2/21, 100]
    """
    return -(x-1/3)*(x+1/7)
In [6]:
2/21
Out[6]:
0.09523809523809523
In [7]:
def milieu(a,b):
    return (a+b)/2
In [8]:
def approx_extrem(a, b, f, epsilon):
    while b-a >= epsilon:
        m = milieu(a,b)
        c = milieu(a,m)
        d = milieu(m,b)
        if f(c) > f(m):
            a,b = a,m
        else:
            if f(d) > f(m):
                a,b = m,b
            else:
                a,b = c,d
    return m
    
    
In [9]:
approx_extrem(-10, 10, f, 0.001)
Out[9]:
0.0
In [10]:
approx_extrem(-5, 5, g, 0.001)
Out[10]:
1.207275390625
In [11]:
approx_extrem(-2, 100, h, 0.001)
Out[11]:
0.09490966796875
In [ ]: