oayt2r2028 14:92
(Optimisation et Processus de décsion - Jupyter Notebook
MINIBeLR LOL ETEOMOReTT IMi siAlr 1 10IN}
INSTITUT SUPERIEUR D‘INFORMATIQUE ET DE GESTION DE KAIR
ouAN
Mouhamed aziz bouhrem
3 Gust Gee 2
exercice 1
Pour résoudre l’équation f(x)=x3-2x2+x=0 dans I'intervalle [-2, 2 ] avec une tolérance de
10-4 , 10-6 et 10-8 en utilisant | algorithme de la dichotomie
Entrée [1]:
wavoununn
10
a
12
B
14
15
16
v7
18
19
20
21
22
23
24
*##* 1 algorithme de la dichotomie****
import numpy as np
import matplotlib.pyplot as plt
def #(x)
return np.power(x, 3) - 24np.power(x, 2) + x
def dichotomie (f, a, b, tol=1e-6, Niter =1000):
assert(#(a) < @ and f(b) > @), “Erreur , on doit avoir f(a) < @ et
assert(a tol:
45 if F(c) < F(d):
16 bed
v7 else:
18 a
19 c=b- (b- a) / gr
20 d= a+ (b- a) / gr
21 return (b + a) / 2
22
23. # Trouver Le maximum ou Le minimum
24 x max = sectionDoree(@, 1)
25
26 # Tracer La fonction
27 x = np.linspace(®, 1, 400)
28 y = np.exp(-x) * np.cos(5*x)
29 plt.plot(x, y, label="F(x)
30 plt.plot(x_max, F(x_max),
31 plt.legend()
32. plt.show()
33
34
e*{-x} cos(5x)")
"ro")
10 — F(x) =e“ {x} cos(5x)
og
0.6
04
0.2
0.0
0.0 0.2 0.4 06 08 1.0
locathost'8888/notebooks/Optimsation et Processus de décision.ipynboayt2r2028 14:92
Entrée [5
(Optimisation et Processus de décsion - Jupyter Notebook
Alors F(x) donne une graphe unimodale sur lintervalle [0, 1]
‘comme F(x) donne un minimum ,On utilisez la méthode d’optimisation appropriée pour le
déterminer numériquement.
=** méthode d' optimisation appropriée***
import math
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize
# Definir La fonction
def F(x)
return math.exp(-x) * math.cos(5*x)
1@ # UtiLlisez La fonction minimiser de scipy pour trouver Le minimum
11 result = minimize(F, @.5, bounds=[(@, 1)])
13. # Imprimer Le résultat
14 print("le minimum valueur est a x
» result.x[@])
16
le minimum valueur est a x = @,588839413095213
pour rechercher les nombres d'itérations nécessaires pour atteindre la convergence vers la
solution avec une tolérance 10-6 prés on va utiliser méthode de gradient a pas constant
(Descente de gradient & pas (quasi-) optimal)
***Descente de gradient a pas (quasi-) optima
yee
Pour illustrer graphiquement les différentes itérations on va utiliser aussi utiliser méthode
de gradient a pas constant aussi
locathost'8888/notebooks/Optimsation et Processus de décision.ipynb
amoayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook
Entrée [6]: import numpy as np
1
2 import matplotlib.pyplot as plt
3
4 # Define the function and its derivative
5 def F(x):
6 return np.exp(-x) * np.cos(5*x)
7
8
9
def dF(x):
return -np.exp(-x) * np.cos(5*x) - 5 * np.exp(-x) * np.sin(S*x)
11 # Gradient descent algorithm
12. def gradient_descent(x_start, learning rate, tol):
3 x = x_start
14 x.values = [x] # List to store the x values at each iteration
45 i= 0 # Initialize the iteration counter
16 while Tru
7 x_new = x - learning_rate * dF(x)
18 if abs(x_new - x) < tol:
19 break
28 x = xnew
21 x_values.append(x) # Store the new x value
22 i++ 1 # Increment the iteration counter
23 return x_values, i
24
25 # Parameters
26 x_start = 0.5
27, learning_rate
28 tol = 10-6
29
3@ # Run the algorithm
31 xvalues, n_iters = gradient_descent(x_start, learning rate, tol)
32
33 print("Le nombre d'itérations nécessaires pour atteindre la convergence
34
35 # Plot the function and the x values at each iteration
36 x = np.linspace(a, 1, 400)
37 y = np.exp(-x) * np.cos(S*x)
38 plt.plot(x, y, label="F(x) = e%{-x} cos(5x)')
39 plt.plot(x_values, [F(x) for x in x_values], ‘ro-') # The red points a
4@ plt.legend()
41 plt.show()
42
43
4a.
Le nombre d'itérations nécessaires pour atteindre la convergence est 62
locathost'8888/notebooks/Optimsation et Processus de décision.ipynb antoayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook
10 — F(x) =e“ {x} cos(5x)
og
0.6
04
0.2
0.0
0.0 0.2 0.4 06 08 1.0
exercice 3
Pour résoudre équation f(x) = 0 avec f(x)= cos(x) en utilisant la méthode d'optimisation
Newton. on difinir la fonction et la mrthode de newton et on excute | algorithme avec le
paramtre
locathost'8888/notebooks/Optimsation et Processus de décision.ipynb annoayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook
Entrée [7]: import numpy as np
# difinir La fonction
def f(x)
return np.cos(x)
def df(x)
return -np.sin(x)
BSeavauaunn
1@ # Newton's method
11 def newton_method(x start, tol):
2 x = x start
B while True:
14 xnew = x = F(x) / dF (x)
15 if abs(x_new - x) < tol:
16 break
v7 x= xnew
18 return x
19
20 # paranetre
21 x.start = 2 # Start near pi
22 tol = 1e-6
23
24 # Excuter algorithm
25 x_zero = newton_method(x_start, tol)
26
27 print("La solution de 1'équation (x) = @ est x =", x_zero)
28
La solution de 1'équation f(x) = @ est x = 1.5707963267948066
Pour déterminer le nombre ditérations nécessaires pour résoudre I’équation {(x)=cos(x)
en utilisant la méthode de Newton avec un point de départ x0=1 5 et une tolérance de 10-8,
nous pouvons modifier 'algorithme précédent pour compter le nombre ditérations
locathost'8888/notebooks/Optimsation et Processus de décision.ipynb sontoayt2r2028 14:92
Entrée [8]:
BSeavauaunn
4
ct
12
3
14
45
16
7
18
19
20
21
22
23
24
25
26
27
28
29
38
(Optimisation et Processus de décsion - Jupyter Notebook
import numpy as np
# difinir La fonction
def F(x):
return np.cos(x)
def df(x)
return -np.sin(x)
# Newton's method
def newton_method(x_start, tol):
x = xstart
i= # Initialisation
while Tru
xnew = x = (x) / df(x)
if abs(x_new - x) < tol:
break
x = xnew
its 1 # Incrementation
return i
# Parametere
x_start = 1.5
tol = 10-8
# excuter
n_iters = newton_method(x_start, tol)
print("Le nombre d'itérations nécessaires pour atteindre 1a convergence
Le nombre d'itérations nécessaires pour atteindre la convergence est 2
locathost'8888/notebooks/Optimsation et Processus de décision.ipynb
wnt