Introduzione a Matlab: Funzioni di Ottimizzazione Metodi Numerici 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1. fminunc: trova il minimo di un problema non vincolato (“unc-onstrained”), usando metodi che usano o stimano il gradiente 2. fminsearch: trova il minimo un problema non vincolato, senza usare nessuna informazione sul gradient (“derivate free methods”) 3. fmincon: risolve un problema di ottimizzazione vincolata 4. fzero: trovi gli zeri di una funzione non lineare (può essere usata per trovare i punti stazionari…) 2. Usare la funzione fminunc Sintassi: [xmin, fval] = fminunc(f, x0, options) Input: 1. f: è la funzione obiettivo 2. x0: è il punto di iniziale da cui iniziare la ricerca 3. options: opzioni definite dall’utente che determinano il tipo di algoritmo usato e diversi parametri numerici Output: 1. xmin: punto di minimo relativo trovato 2. fval: funzione obiettivo valutata in xmin 2. Usare la funzione fminunc Sintassi: [xmin, fval] = fminunc(f, x0, options) Esempio: >> f = @(x) x(1)^2-x(2)^2; >> [xbar, f_xbar] = fminunc(@f, [-2,0]) xbar = -1.7099e-022 f_xbar = 0.0000e+000 2.9237e-044 2. Usare la funzione fminunc Sintassi: [xmin,fval,exitflag,output,grad,hessian] = fminunc(f, x0, options) Esempio: >> f = @(x) x(1)^2-x(2)^2; >> [x,fval,exitflag,output,grad,hessian]=fminunc(@f,[2,0]) PROVARE! 3.1 Opzioni per fminunc • Opzioni per vedere il processo di ottimizzazione: options = optimset('Display','iter’) >> fun = @(x) x(1)*exp(-(x(1)^2+x(2)^2))+(x(1)^2+x(2)^2)/20; >> x0 = [1,2]; >> [x,fval,exitflag,output] = fminunc(fun,x0,options) Iteration,Func-count,f(x),Step-size,1st order optimality PROVARE! 3.2 Opzioni per fminunc • Opzioni per vedere il critero di arresto: options = optimset(‘MaxFunEvals’,2000,’MaxIter’,2000’) options = optimset(options,’TolFun’,1e-7,’TolX’,1e-7) La norma infinito è (impiegando la nozione di limite di una funzione) il massimo dei valori delle componenti in valore assoluto. 3.3 Opzioni per fminunc Opzioni per vedere la scelta del metodo di soluzione: • Trust-Region options = optimset(’LargeScale’,’on’,’GradObj’,’on’,’Hessian’,’off’); • Steepest Descent options=optimset(’LargeScale’,’off’,’GradObj’,’off’, ’HessUpdate’,’steepdesc’); • BFGS: Algoritmo di Broyden–Fletcher–Goldfarb–Shanno options=optimset(’LargeScale’,’off’,’GradObj’,’off’, ’HessUpdate’,’bfgs’); • DFP: Algoritmo di Davidon–Fletcher–Powell options= optimset(’LargeScale’,’off’,’GradObj’,’off’, ’HessUpdate’,’dfp’); Esercizio 5 Trovare il minimo della seguente funzione (chiamata di Rosenbrock), usando i metodi di soluzione visti nella slide precedente: f(x,y) = 100(y-x2)2 + (x-1)2 Tracciare un grafico qualitativo di f(x,y) e delle sue curve di livello e vedere dove si trova il punto trovato dai diversi algoritmi.