7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 1/59
LEZIONE ICO 12-10-2009
Lucia Marucci
Argomento:
introduzione alla piattaforma Matlab.
Risoluzione numerica di problemi di minimo liberi e
vincolati.
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 2/59
http://www.mathworks.com/access/helpdesk/help/toolbo
x/optim/optim.shtml
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 3/59
Definizione funzione obiettivo in MatlabDefinizione funzione obiettivo in Matlab
Definizione della funzione obiettivo :
creazione di una MATLAB function:
• Input
• Output
• Modi di scrivere la funzione obiettivo:1. Creare una funzione anonima nella riga di comando
2. Scrivere un M-file
3. Utilizzo del comando “Inline”
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 4/59
1.Creare una funzione anonima
nella riga di comandoesempio
>>f = @(x) 2*x^2-3*x+4;>>f(3)
ans = 13
>>f = @(x,y) 2*x*y;
>>f(2,2)
ans = 8
Si utilizza quando la f è semplice o
quando non si userà in una
successiva sessione di MATLAB
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 5/59
2. Usando il comando inline
• Utilizzando il comando inline:
– Crea una funzione nella linea di comando:
Sintassi: f = inline(‘expr’,’n’) con>f = inline('2*x^2-3*x+4','x');
>>f(3)
ans = 13
>> f = inline('2*x*y', 'x', 'y');
>> f(2,2)
ans = 8
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 6/59
3. Scrivere un M-file
Bisogna aprire un file di Matlab editor
function [out1, out2, ...] = funname(in1,in2, ...)
esempio: nell’editor square.mfunction f = square(x)
f = x.^2;
Nella command window si richiama la funzione
@ square per creare una funzione handle per
square. Si può usare questo metodo quando la f(x)è complicata o se si intende riutilizzare la funzione.
NOTA BENE attenzione ai path!
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 7/59
MINIMIZZAZIONE NON VINCOLATA:
fminunc
• Scopo: trovare il minimo di una funzione
multivariabile non vincolata: – x è un vettore ed f(x) è una funzione che ritorna uno
scalare
• Sintassi:
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 8/59
[x,fval,exitflag,output,grad,hessian] =
fminunc(fun,x0,options)INPUT
• x0 è punto iniziale di ricerca, scalare, vettore o matrice
• fun è la funzione obiettivo• options: crea attraverso il comando optmiset parametri di
ottimizzazione (numero di iterazioni, tolleranzadell’algoritmo,ecc..)
OUTPUT• fval valore della funzione obiettivo nel punto di minimo
• Exitflag: descrive le condizioni di uscita
• Output: genera una struttura di uscita che riporta informazioni
circa l’operazione di ottimizzazione• grad: ritorna il valore del gradiente di fun alla soluzione x
• hessian: ritorna il valore dell’hessiano di fun alla soluzione x
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 9/59
Input
>>x = fminunc (myfun,x0)
x0=scelta iniziale;
myfun è una Matlab function, ovvero:
x = fminunc(@myfun,x0)
function f = myfun(x)
f = ...
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 10/59
>>x = fminunc (myfun,x0,options)
Options:
Sintassi:options=optimset('param1',value1,'param2',value2,...)
Input
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 11/59
Algoritmi utilizzati da fminunc
• Per default fminunc utilizza algoritmi :
– Quasi Newton method con BFGS, steepestdiscendent
medium scale: se poniamo nell’opzione LargeScale ‘off’ nel
comando optimset
– Trust region method, Newton method e gradiente
coniugato
large scale: se l’opzione GradObj è ‘on’ nel comandooptimset
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 12/59
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 13/59
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 14/59
Output
• x: valore ottimo (soluzione del problema)
• fval: valore della funzione nel punto ottimo
• exitflag: descrive le condizioni di uscita:
» se>0 la funzione converge ad una soluzione x
» se=0 l’algoritmo non è in grado di ottenere una
soluzione nel numero di iterazioni stabilite» se <0 la funzione non converge alla soluzione x
• output: informazioni circa il processo di ottimizzazione
» Iterations: numero di iterazione dell’algoritmo
» funcCount : numero di valutazioni della funzione
» Algorithm: algoritmo usato
» Step-size
» Firstorderopt: norma del gradiente nella soluzione
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 15/59
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 16/59
Esempio 1: Unconstrained Minimization
• Problema di minimizzazione della
funzione:
• Passi da effettuare:
– Generare un M-file che ritorni il valore della
funzione
– Invocare la routine di risoluzione fminunc
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 17/59
Step 1: scrittura dell’M-file myfun.m
Step 2: nella command window chiamo
fminunc
>>x0=[1 1];
>>[x,fval] = fminunc(@myfun,x0)
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 18/59
Quasi_Newton
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 19/59
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 20/59
• Minimizziamo con un altro algoritmo:
• Modifichiamo l’M-file:myfun.m fornendo gradiente
• Creazione di una struttura options
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 21/59
trust-region Newton
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 22/59
Limiti dell’ fminunc
• La funzione da minimizzare deve esserecontinua
• Potrebbe determinare soluzioni locali
• Ottimizzazione di funzioni di variabili reali: x
deve essere una variabile reale
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 23/59
• Trova il minimo di una funzione obiettivo multivariabile in
assenza di vincoli SENZA CALCOLARE GRADIENTE ALGORITMO: Nelder-Mead simplex direct search
• Sintassi:
MINIMIZZAZIONE NON VINCOLATA
fminsearch
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 24/59
– x= fminsearch (fun,x0), partendo da un punto di
ricerca iniziale tenta di trovare il minimo di fun
– fun è una funzione descritta nella linea dicomando, dal comando inline o da un M.file
– x= fminsearch (fun,x0,options), tenta la
minimizzazione usando il parametro options.
Usare optimset per stabilire le opzioni
dell’algoritmo
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 25/59
• [x,fval]=fminsearch(…) , riporta in fval il valore ilvalore della funzione obiettivo fun nel valore x
• [x,fval,exitflag]=fminsearch(…), riporta un valoreexitflag che descrive le condizioni di uscita difminsearch
• [x,fval,exitflag,output]=fminsearch(…), riporta inoutput le informazioni inerenti il processo diottimizzazione.
• [x,fval,exitflag,output]=fminsearch(…P1,P2…),dove P1… Pn sono parametri della funzioneobiettivo
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 26/59
Input arguments
• fun: funzione da minimizzare
– fun può essere:
• M.file:
con myfun Matlab function
• Funzione anonima nella linea di comando
• Options: valgono le stesse considerazioniper fminunc….. ma i più usati sono:
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 27/59
Options
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 28/59
Output Arguments
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 29/59
Esempio 1
Minimizzazione della funzione di Rosenbrock:x0=[-1.2, 1]
Presenta minimo (1,1) ed fval=0
-Scriviamo l’M.file:
function f= myfun(x)
f=
-Passiamo dall’M.file alla routine di ottimizzazione:
[x,fval] = fminsearch (f , [-1.2, 1] )
OPPURE
La definiamo nella command window
100*(x(2)-x(1)^2)^2+(1-x(1))^2;
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 30/59
E i 2
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 31/59
Esempio 2
• Se la funzione obiettivo è parametrica:
>>f= inline('100*(x(2)-x(1)^2)^2+(a-x(1))^2','x','a')
>>a=2;
>>options= optimset ('Display','iter','TolX',1e-8);>>[x,fval]= fminsearch (f,[1 2],options,a)
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 32/59
Vantaggi e limiti• Vantaggi:
– se f(x) è discontinua, fminsearch è uncomando robusto
• Svantaggi: – è in genere meno efficiente di fminunc per
problemi di ottimizzazione di ordine maggiore
di 2 – Ottimizzazione di funzioni di variabili reali: x
deve essere una variabile reale
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 33/59
MINIMIZZAZIONE VINCOLATAMINIMIZZAZIONE VINCOLATA
fminconfmincon
dove x; b; beq; lb; ub sono vettori, A; Aeq sono matrici; c(x) e
ceq(x) sono funzioni vettoriali (cioe’ ad ogni vettore x associano un
vettore) e f e’ una funzione scalare (cioe’ ad ogni vettore x associa
un numero reale). Le funzioni f(x), c(x) e ceq(x) possono essere
non lineari.
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 34/59
sintassi input
x=fmincon(fun,x0,A,b)
partendo da x0 cerca il minimo x della funzione fun
sotto i vincoli lineari A*x <= b .
x0 può essere uno scalare, un vettore o una matrice.
x=fmincon(fun,x0,A,b,Aeq,beq)
vincoli lineari Aeq*x = beq e anche A*x <= b.
(A=[ ] and B=[ ] se non ci sono disuguaglianze)
min F(x) vincoli: A*x <= b, Aeq*x= beq
C(x) <= 0, Ceq(x) = 0
LB <= x<= UB
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 35/59
x=fmincon(fun,x0,A,b,Aeq,beq,LB,UB)
Definisce un set di lower e upper per la variabile x,
di modo che la soluzione sia trovata nel range
LB <= x <= UB.
Porre LB(i) = -Inf se x(i) é illimitata inferiormente;
porre UB(i) = Inf se x(i) é illimitata superiormente.
x = fmincon(fun,x0,A,b,Aeq,beq,LB,Ub,nonlcon,options)
se ci sono anche dei vincoli non lineari definiti innonlcon e delle opzioni specificate con optimset.
min F(x) vincoli: A*x <= b, Aeq*x= beq
C(x) <= 0, Ceq(x) = 0
LB <= x<= UB
sintassi output
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 36/59
sintassi output
[x,fval] = fmincon(...) ritorna il valore della funzione
Obiettivo raggiunto
[x,fval,exitflag] = fmincon(...)[x,fval,exitflag,output] = fmincon(...)
[x,fval,exitflag,output,lambda] = fmincon(...)
Ritorna una struttura lambda i cui campi contengonoI moltiplicatori di Lagrange alla soluzione x
[x,fval,exitflag,output,lambda,grad,hessian]
=fmincon(...)
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 37/59
-active-set (DEFAULT)
-interior-point
-trust-region-reflective SE SPECIFICATO
MA BISOGNA DARE IL JACOBIANO
ALGORITMI
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 38/59
Esempio 1
Minimizzare f(x)=-x1x2x3
x0 = [10; 10; 10]
Vincolo: 1 2 30 2 2 7 2 x x x ≤ + + ≤
1.Scrivo m file myfun_vin.m
function f = myfun_vin(x)
f = -x(1) * x(2) * x(3);
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 39/59
min F(x) vincoli: A*x <= b, Aeq*x= beq
C(x) <= 0, Ceq(x) = 0LB <= x<= UB
2. Riscrivo il vincolo riportandolo a due
minorazioni
1 2 30 2 2 72 x x x ≤ + + ≤
1 2 3
1 2 3
2 2 0
2 2 72
x x x
x x x
− − − ≤
+ + ≤
In questo modo posso formulare i due vincoli,
entrambi lineari, come
A=[-1 -2 -2; 1 2 2];
b=[0;72];
A*X <= b
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 40/59
>> A=[-1 -2 -2;1 2 2];>> b=[0;72];
>> x0 = [10; 10; 10]; % Starting guess at the solution
>> [x,fval] = fmincon(@myfun_vin,x0,A,b)
3 . Chiamo routine fmincon dalla command window
E i 2
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 41/59
Esempio 2
C=10; V=6; X0=[1 1 1];
Mfile nlcon.m per il vincolo non lineare
function [C,Ceq]=nlcon(x)
C=[ ];Ceq=[x(1)*x(2)*x(3)-6];
min F(x) vincoli: A*x <= b, Aeq*x= beq
C(x) <= 0, Ceq(x) = 0LB <= x<= UB
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 42/59
>>[x,fval,exitflag,output,lambda,grad,hessian]=
fmincon(inline('2*10*(x(1)*x(2)+x(1)*x(3)+x(2)*x(3))‘,’x’),[
1;1;1],[ ],[ ],[ ],[ ],[-Inf;-Inf;-Inf],[Inf;Inf;Inf],@nlcon)
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 43/59
Esempio 3
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 44/59
Esempio 3
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 45/59
M-files:
Command
window
Ri l i di i t i di i i
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 46/59
Risoluzione di sistemi di equazioni
• fsolve e fzero:
fsolve : risoluzione di sistemi non lineari diequazioni: con x vettore e F(X) che
ritorna un valore vettoriale (determinazione delle
radici (zero) di un sistema non lineare diequazioni)
Sintassi
Input Argument
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 47/59
Input Argument
• fun: sistema di equazioni non lineari da risolvere:
accetta un vettore x e ritorna un vettore F, equazioni
non lineari valutate in x. fun può essere richiamata
da :• M.file:
• funzione anonima:
• Jacobiano:
– in tal modo la funzione fun richiama in un secondo output il valore
della matrice J in x.
Output Arguments
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 48/59
Output Arguments
• exitflag:CaratteristicheCaratteristiche
delldell’’algoritmoalgoritmo
utilizzatoutilizzato
• utput:
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 49/59
Informazioni circaInformazioni circa
il processo diil processo di
ottimizzazioneottimizzazione
Algoritmo• Per default viene utilizzato Trust-region dogleg.
• Alternativamente, si puo’ scegliere Levenberg-Marquardt
oppure Gauss-Newton.
Esempio 1
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 50/59
p
• Sistema di equazioni in 2 incognite:
• Risolviamo in x:
– Scriviamo un M.file:
– Routine di ottimizzazione:
xx00=[=[--5,5,--5]5]
Esempio 2
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 51/59
p
• Trovare una matrice X tale che:
con x0=[1,1;1,1] (matrice)
• Scrittura dell’M.file:
• Invochiamo la routine di ottimizzazione:
x= fval=
exitflag=1
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 52/59
Limiti• Le funzioni del sistema devono essere
continue
• Le variabili devono essere reali
• Fsolve potrebbe convergere ad un puntoche non e’ uno stazionario; in tal caso
converrebbe variare le condizioni iniziali.
fzerofzero
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 53/59
fzerofzero
• Soluzioni di una funzione continua di unavariabile
• Sintassi:
• Descrizione: – x=fzero(fun,xo), determina lo zero di fun vicino ad xo,
se xo è uno scalare. fun è una funzione descritta daM.file o da una funzione anonima. Il valore xdeterminato da fzero è vicino al punto per cui lafunzione fun cambia segno, o NaN se la ricerca nonammette risultato.
Input arguments
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 54/59
Input arguments
• fun: funzione da risolvere
– M.file richiamata nella routine dal comando @
con
– Attraverso una funzione anonima:
– Options: cambiando i valori attraverso il
comando optimiset…. Ovvero:
Options
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 55/59
Options
Output arguments
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 56/59
Esempi
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 57/59
• Calcolare il valore di determinando lo zerodella funzione seno vicino al punto 3
• Trovare lo zero della funzione coseno
nell’intervallo [1 2]
Trovare lo zero della funzione:
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 58/59
• Scriviamo un M.file:
• Per calcolare lo zero vicino a 2 :
• Dal momento che questa è una funzione
polinomiale, è possibile usare il comando roots ([1 0
-2 5]), che determina lo stesso zero reale e coppie dizero coniugate
Limiti
7/23/2019 Matlab, Problemi Di Minimo
http://slidepdf.com/reader/full/matlab-problemi-di-minimo 59/59
• Il comando è in grado di trovare un punto dove la
funzione cambia segno.
• Se la funzione è continua, tale punto è anche un punto
per cui la funzione si avvicina al suo zero
• Se la funzione non è continua, il comando trova punti di
discontinuità invece cha la soluzione.
• Inoltre, la funzione determina lo zero come punto diintersezione di fun con l’asse x. Punti per cui la funzione
tocca l’asse, ma non lo intercetta non sono considerati
zero. Esempio la funzione x^2 è una parabola che tocca
l’asse x nello zero. Non attraversando l’asse x, il puntonon viene visto come soluzione.