BOUIDI
Introduction
Le logiciel Matlab a une srie dalgorithmes dj implments pour trouver les racines
(root, fzero), les moindres cars (lsqcurvefit, lsqlin. . .), la solution de systme dqua-
tions (fsolve,fzero) et la minimisation, en une ou plusieurs dimensions. Pour minimiser
une fonctions une variable dans un domaine, on utilise fminbnd et si la fonction a plu-
sieurs variables, on utilise fminsearch. Pour le cas de problmes contraints, on utilise
linprog et quadrprog pour les cas linaires et quadratiques respectivement. La fonction
fmincon permet de trouver le minimum dun problme avec contraintes non linaire et
multivariable.
Matlab possde un toolkit (une bibliothque) doptimisation (Optimization Toolbox) pour
les problmes plus compliqus, qui automatise via GUI (interface graphique) le processus
de choix de lalgorithme. Matlab utilise plusieurs algorithmes selon le type de problme
rsoudre. Par exemple, on cite :
Interior reflective Newton method ;
Trust-region-dogleg ;
Trust-region-reflective ;
Levenberg-marquardt ;
Simplex ;
BFGS ;
MinMax. . .
En gnral, une fonction a plusieurs minimums. Pour arriver la solution dsire (mi-
nimum global), il est trs important danalyser la fonction en dtail avant de choisir un
point de dpart x0 pour lalgorithme.
Pour trouver le type de point critique, on utilise les deuximes drives values dans le
00
point dtude. Pour le cas dune fonction une variable f : x 7 f (x), si f (a) > 0, on
00
trouve un minimum local en ce point, si f (a) < 0, on trouve un maximum local et si
00
f (a) = 0, on ne peut rien dire, mais a peut tre un point selle.
Par exemple, pour les fonctions continues et deux fois drivables, les points station-
naires identifis (l o la drive est 0) sont classs selon la matrice Hessienne (minimum
1
local si positif, maximum local si ngatif et indfini sil sagit dun point selle). Pour
le cas dune fonction deux variables, on trouve fxx (x, y), fyy (x, y) et fxy (x, y) va-
lus au point (a, b). Le dterminant de la matrice Hessienne 1 est dfinie par : |H| =
2
fxx (x, y) fyy (x, y) fxy (x, y)
2
fxx (x, y) fyy (x, y) fxy (x, y) fxx (x, y) Classification
>0 >0 Minimum local
>0 <0 Maximum local
<0 >0 Point de selle
Pour trouver les points extrmes (ou points critiques) dune fonction de deux variables,
par exemple : f (x, y) = x3 + y 3 + 3x2 3y 2 8, on doit trouver les points qui annulent
les drives partielles de la fonction x f (x, y) = 0 et y f (x, y) = 0.
syms x y ;
f = x3 + y3 + 3 x2 3 y2 8 ;
fx = diff(f,x)
fy = diff(f,y)
S = solve(fx,fy)
La commande solve trouve les solutions qui sont gales zro simultanment pour les
deux fonctions drives. S est une structure variable. Pour voir les valeurs de S :
[S.x,S.y]
Le rsultat montre les points critiques pour la fonction analyse (0, 0), (0, 2), (2, 0)
et (2, 2).
Pour visualiser les rsultats, on peut utiliser la fonction :
2f 2f 2f
x21 x1 x2 ... x1 xn
2f 2f
..
... .
2f x2 x1 x2 x2
1. Hij (f ) = =
xi xj .. .. .. ..
.
. . .
2f 2f 2f
xn x1 xn x2 ... x2n
2
On a aussi la fonction
surfc(x,y,z)
Parfois cest aussi utile de visualiser les lignes de niveaux dans un graphique spar
contour(x,y,z)
meshc(x,y,z)
surfc(x,y,z)
contour(x,y,z,20)
Peu importe la direction dapproche du point (-2,0), les courbes de niveau aug-
mentent. Par consquent, on trouve un maximum local (-2,0).
Peu importe la direction dapproche du point (0,2), les courbes de niveau diminuent.
Par consquent, on trouve un minmum local (0,2).
Pour les points (0,0) et (-2,2), on observe une croissance des courbes de niveau
selon les directions opposes. on peut dire quil y a un point de selle (0,0) et
(-2,2).
3
Optimisation avec Matlab
Minimisation unidimensionnel : fminbnd
Les mthodes doptimisation pour les fonctions une variable sappellent recherche
par ligne ("line searche"). Les algorithmes implments dans Matlab pour la fonction
fminbnd sont "Golden section search" et linterpolation parabolique.
On cre une fonction externe dans un fichier f.m. Travailler avec des fichiers externes
permet de simplifier et rduire les erreurs.
function y = f(x)
y = 1./((x 0.3).2 + 0.01) + 1./((x 0.9).2 + 0.04) 6;
clear all
fplot(f,[-5 5])
grid on
min=fminbnd(f,0.3,1,optimset(Display,iter))
fplot(f,[0 2])
hold on
plot(min,f(min),r*) ;
4
Minimisation multidimensionelle : fminsearch, fminunc
Dans Matlab, pour minimiser une fonction plusieurs variables, on utilise lalgo-
rithme du Simplex qui est implment dans fminsearch. Matlab utilise cet algorithme
car il na pas besoin de calculer ni le gradient ni la matrice Hessienne chaque itration.
Exemple :
function y = g(x)
y = 100 (x(2) x(1)2 )2 + (1 x(1))2 ;
x0 = [5 5] ;
[x, gval, exitflag, output] = fminsearch(g,x0)
Une autre fonction avec une syntaxe similaire est le fminunc qui solutionne des pro-
blmes doptimisation non linaires, multi-variables et sans restrictions Cette fonction
permet de changer entre algorithmes diffrents par exemple de mthode de "Interior Re-
flective Newton" (si lon connait les drives) ou la mthode BFGS en cas contraire.
Lalgorithme BFGS approxime la matrice Hessienne (mthode quasi-Newton).
function y = h(x)
y = x(1)2 x(2) + x(1) x(2)2 + x(2)2 + x(2)2 ;
a) Pour le cas BFGS, qui approxime la matrice Hessienne chaque pas de calcul :
x0 = [1 -1] ;
[x, hval, exitflag, output] = fminsearch(@h,x0)
5
b) Si lon connait le gradient, on peut le dfinir explicitement
options = optimset(GradObj,on);
x0 = [1 1] ;
[x, hval, exitflag, output] = fminsunc(@hdh,x0,options)