Soit f la fonction définie sur R par f(x)=x33x2+5.

Courbe de f

In [6]:
 
%pylab inline
 
def f(x):
    return x**3-3*x**2+5
 
x = np.linspace(-5,10,500)
y = f(x)
plot(x,y,color='red')
hlines(10,-6,10,color='green')
vlines([3,4],-10,15,color='blue')
ylim(-10,15)
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.

Approximation de l solution α de f(x)=0 sur [-2;-1] par dichotomie

In [9]:
 
%%python3
 
def dicho(f,a,b,p):  #Algorithme de dichotomie
    k=0  #compteur d'étape
    while b-a>=p: #Tant que b-a>= precision p
        k+=1
        m=(a+b)/2       #Calcul de m
        print("Etape %s: a=%f , b=%f, m=%f"%(k,a,b,m))
        if f(a)*f(m)>0:    # Si f(a) et f(m) non nuls et de même signe a reçoit m
            a=m
        elif f(a)*f(m)<0: # Si f(b) et f(m) non nuls et de même signe b reçoit m
            b=m
        else: #sinon f(m) =0 donc a = b = m
            a = b = m
    ch="Un encadrement d'amplitude inférieure à {} de la solution obtenu en {} étapes est : \n [{};{}]"    
    print(ch.format(p,k,a,b)) #la méthode format permet d'insérer les valeurs  de a,b,p dans la phrase réponse ch
    print(" ")              # pour sauter une ligne
    return a,b
 
def f(x):
    return x**3-3*x**2+5
 
print('Avec une amplitude de 0.1')
dicho(f,-2,-1,0.1)
print('Avec une amplitude de 0.001')
dicho(f,-2,-1,0.001)
Avec une amplitude de 0.1
Etape 1: a=-2.000000 , b=-1.000000, m=-1.500000
Etape 2: a=-1.500000 , b=-1.000000, m=-1.250000
Etape 3: a=-1.250000 , b=-1.000000, m=-1.125000
Etape 4: a=-1.125000 , b=-1.000000, m=-1.062500
Un encadrement d'amplitude inférieure à 0.1 de la solution obtenu en 4 étapes est : 
 [-1.125;-1.0625]
 
Avec une amplitude de 0.001
Etape 1: a=-2.000000 , b=-1.000000, m=-1.500000
Etape 2: a=-1.500000 , b=-1.000000, m=-1.250000
Etape 3: a=-1.250000 , b=-1.000000, m=-1.125000
Etape 4: a=-1.125000 , b=-1.000000, m=-1.062500
Etape 5: a=-1.125000 , b=-1.062500, m=-1.093750
Etape 6: a=-1.125000 , b=-1.093750, m=-1.109375
Etape 7: a=-1.109375 , b=-1.093750, m=-1.101562
Etape 8: a=-1.109375 , b=-1.101562, m=-1.105469
Etape 9: a=-1.105469 , b=-1.101562, m=-1.103516
Etape 10: a=-1.105469 , b=-1.103516, m=-1.104492
Un encadrement d'amplitude inférieure à 0.001 de la solution obtenu en 10 étapes est : 
 [-1.1044921875;-1.103515625]
 

Approximation de la solution β de f(x)=10 sur [3;4] par dichotomie

In [10]:
 
%%python3
 
def dicho2(f,a,b,p):  #Algorithme de dichotomie
    k=0  #compteur d'étape
    while b-a>=p: #Tant que b-a>= precision p
        k+=1
        m=(a+b)/2       #Calcul de m
        print("Etape %s: a=%f , b=%f, m=%f"%(k,a,b,m))
        if f(m)<10:    # Si f(m)<10  a = m
            a=m
        elif f(m)>10: # Si f(m)>10 b reçoit m
            b=m
        else: #sinon f(m) =10 donc a = b = m
            a = b = m
    ch="Un encadrement d'amplitude inférieure à {} de la solution obtenu en {} étapes est : \n [{};{}]"    
    print(ch.format(p,k,a,b)) #la méthode format permet d'insérer les valeurs  de a,b,p dans la phrase réponse ch
    print(" ")              # pour sauter une ligne
    return a,b
 
def f(x):
    return x**3-3*x**2+5
 
print('Avec une amplitude de 0.1')
dicho2(f,3,4,0.1)
print('Avec une amplitude de 0.001')
dicho2(f,3,4,0.001)
Avec une amplitude de 0.1
Etape 1: a=3.000000 , b=4.000000, m=3.500000
Etape 2: a=3.000000 , b=3.500000, m=3.250000
Etape 3: a=3.250000 , b=3.500000, m=3.375000
Etape 4: a=3.375000 , b=3.500000, m=3.437500
Un encadrement d'amplitude inférieure à 0.1 de la solution obtenu en 4 étapes est : 
 [3.375;3.4375]
 
Avec une amplitude de 0.001
Etape 1: a=3.000000 , b=4.000000, m=3.500000
Etape 2: a=3.000000 , b=3.500000, m=3.250000
Etape 3: a=3.250000 , b=3.500000, m=3.375000
Etape 4: a=3.375000 , b=3.500000, m=3.437500
Etape 5: a=3.375000 , b=3.437500, m=3.406250
Etape 6: a=3.406250 , b=3.437500, m=3.421875
Etape 7: a=3.421875 , b=3.437500, m=3.429688
Etape 8: a=3.421875 , b=3.429688, m=3.425781
Etape 9: a=3.425781 , b=3.429688, m=3.427734
Etape 10: a=3.425781 , b=3.427734, m=3.426758
Un encadrement d'amplitude inférieure à 0.001 de la solution obtenu en 10 étapes est : 
 [3.42578125;3.4267578125]
 

Courbe de g où g(x)=12(x26x10x).

In [15]:
 
%pylab inline
from __future__ import division
 
def g(x):
    return 1/2*(x**2-6*x-10/x)
 
x = np.linspace(-5,10,500)
y = g(x)
plot(x,y,color='red')
ylim(-50,50)
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.