Recherche du minimum d'une fonction

La fonction fminbnd permet de trouver le minimum d'une fonction à une variable.

Il faut fournir d'une part la fonction f elle-même et d'autre part les bornes inférieure et supérieure de l'intervalle dans lequel le minimum est recherché. f peut être définie dans un fichier ou par l'intermédiaire d'une fonction anonyme.

Seule l'utilisation d'une fonction anonyme est traité ici (on peut s'inspirer de ce qui a été présenté pour fzero si une fonction est définie dans un fichier).

Exemple

On cherche le minimum de la fonction suivante :

f\left( x \right) = \sin\left(x^2\right)-x*\cos\left(x\right)

dans l'intervalle compris entre -2 \pi et 2 \pi.

1
2
3
4
5
>> f= @(x) sin(x.^2) - x.*cos(x);
>> x_minimum = fminbnd(f,-2*pi,2*pi)
  
x_minimum =
    0.3919

En fait, par défaut, la fonction fminbnd renvoie l'abscisse du minimum (parce qu'en pratique, c'est souvent ce que l'on cherche !), mais on peut aussi récupérer la valeur de ce minimum, c'est-à-dire l'ordonnée :

Exemple

1
2
3
4
5
6
7
8
9
10
>> [x_minimum,y_minimum,exitflag] = fminbnd(@(x) sin(x.^2) - x.*cos(x),-2*pi,2*pi)
  
x_minimum =
    0.3919
  
y_minimum =
    -0.2092
  
exitflag =
    1

Remarque

Le booléen renvoyé dans la variable exitflag indique si la recherche a été fructueuse (exitflag=1) ou non (exitflag=0).

Attention

Il est à noter que la valeur trouvée correspond toujours à un minimum local de la fonction, mais pas au minimum global. Il est prudent de toujours tracer la fonction pour avoir une idée de ce que l'on doit trouver...

1
>> ezplot(f)
Visualisation des minimums locaux
Visualisation des minimums locaux

Dans le cas d'une fonction dépendant de plusieurs paramètres, on s'inspirera de ce qui a été présenté de l'utilisation des fonctions anonymes avec fzero.