Soit f(x)=3 x^3+2 x^2-5 x une fonction définie sur \mathbb{R} .
On cherche le minimum de f sur l'intervalle [-1; 2] . L'algorithme par balayage teste toutes les valeurs que prend f sur l'intervalle, espacées d'un pas constant.
Comment subdiviser l'intervalle [-1;2] en 10 intervalles ?
La longueur de l'intervalle [-1; 2] est 2 - (-1) = 3 .
Ainsi, pour le diviser en 10 segments, on aura un pas de \dfrac{3}{10} = , soit 0,3.
Quelle structure en Python permet de calculer toutes les valeurs de f espacées d'un pas constant ?
Pour calculer les images par une fonction de valeurs espacées d'un pas constant, on peut définir une variable \verb/x1/ initialisée à la première valeur.
Avec une boucle \verb/for/ permettant d'ajouter le pas à chaque tour de boucle, on peut calculer les images souhaitées.
Parmi les instructions citées, celle qui permet de calculer ces images est donc une boucle \verb/for/.
Comment peut-on écrire la fonction f(x)=3 x^3+2 x^2-5 x en Python ?
Le mot-clé qui permet de définir une fonction en Python est \verb/def/. Pour mettre une variable au carré, on peut utiliser l'opérateur \verb/**/.
Ainsi :
\verb/ def f(x): /
\verb/ return 3*x**3 + 2*x**2 - 5*x /
Quelle fonction permet de retourner une valeur approchée du minimum de la fonction f sur l'intervalle [a; b] à l'aide d'un algorithme de balayage ?
On commence par définir le pas constant \verb# p = (b-a)/N#, et on pose une variable qui contiendra le minimum qu'on initialise à f(a) . Si l'on trouve une valeur plus faible, cette variable sera mise à jour.
On parcourt toutes les valeurs espacées du pas \verb/p/…qui sont plus faibles que la plus petite valeur retenue, alors on affecte à la variable \verb/minimum/ la valeur \verb/y/.
On actualise \verb/x/ en ajoutant le pas \verb/p/ pour l'itération suivante :
\verb/x += p/
Ainsi, le programme qui convient est :
\verb/ def balayage(f, a, b, N): /
\verb# p = (b-a)/N #
\verb/ x = a /
\verb/ minimum = f(a) /
\verb/ for i in range(N): /
\verb/ y = f(x) /
\verb/ if y < minimum: /
\verb/ minimum = y /
\verb/ x += p /
\verb/ return minimum /
\verb/ a = -1 /
\verb/ b = 2 /
\verb/ def f(x): /
\verb/ return 3*x**3 + 2*x**2 - 5*x /
\verb/ print(balayage(a, b, f, 10)) /