of 59 /59
LEZIONE ICO 12-10-2009 Lucia Marucci [email protected] Argomento: introduzione alla piattaforma Matlab. Risoluzione numerica di problemi di minimo liberi e vincolati.

Argomento: introduzione allapiattaformaMatlab. Risoluzione ...unina.stidue.net/Identificazione e Controllo Ottimo/Materiale... · Definizione funzione obiettivo in Matlab Definizione

Embed Size (px)

Text of Argomento: introduzione allapiattaformaMatlab. Risoluzione ...unina.stidue.net/Identificazione e...

LEZIONE ICO 12-10-2009

Lucia [email protected]

Argomento:introduzione alla piattaforma Matlab.Risoluzione numerica di problemi di minimo liberi evincolati.

http://www.mathworks.com/access/helpdesk/help/toolbox/optim/optim.shtml

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 comando2. Scrivere un M-file3. Utilizzo del comando Inline

1.Creare una funzione anonimanella 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

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

3. Scrivere un M-file

Bisogna aprire un file di Matlab editorfunction [out1, out2, ...] = funname(in1,in2, ...)

esempio: nelleditor square.mfunction f = square(x)f = x.^2;

Nella command window si richiama la [email protected] 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!

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:

[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, tolleranza dellalgoritmo,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 loperazione di ottimizzazione grad: ritorna il valore del gradiente di fun alla soluzione x hessian: ritorna il valore dellhessiano di fun alla soluzione x

Input>>x = fminunc (myfun,x0)

x0=scelta iniziale;myfun una Matlab function, ovvero:

x = fminunc(@myfun,x0)

function f = myfun(x)f = ...

>>x = fminunc (myfun,x0,options)

Options:

Sintassi:options=optimset('param1',value1,'param2',value2,...)

Input

Algoritmi utilizzati da fminunc

Per default fminunc utilizza algoritmi : Quasi Newton method con BFGS, steepest

discendentmedium scale: se poniamo nellopzione LargeScale off nel comando optimset

Trust region method, Newton method e gradiente coniugato

large scale: se lopzione GradObj on nel comando optimset

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 lalgoritmo non in grado di ottenere una

soluzione nel numero di iterazioni stabilite se

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

Step 1: scrittura dellM-file myfun.m

Step 2: nella command window chiamo fminunc

>>x0=[1 1];>>[x,fval] = fminunc(@myfun,x0)

Quasi_Newton

Minimizziamo con un altro algoritmo: Modifichiamo lM-file:myfun.m fornendo gradiente

Creazione di una struttura options

trust-region Newton

Limiti dell fminunc

La funzione da minimizzare deve essere continua

Potrebbe determinare soluzioni locali

Ottimizzazione di funzioni di variabili reali: x deve essere una variabile reale

Trova il minimo di una funzione obiettivo multivariabile in assenza di vincoli SENZA CALCOLARE GRADIENTEALGORITMO: Nelder-Mead simplex direct search

Sintassi:

MINIMIZZAZIONE NON VINCOLATAfminsearch

x= fminsearch (fun,x0), partendo da un punto di ricerca iniziale tenta di trovare il minimo di fun

fun una funzione descritta nella linea di comando, 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 dellalgoritmo

[x,fval]=fminsearch() , riporta in fval il valore il valore della funzione obiettivo fun nel valore x

[x,fval,exitflag]=fminsearch(), riporta un valoreexitflag che descrive le condizioni di uscita di fminsearch

[x,fval,exitflag,output]=fminsearch(), riporta in output le informazioni inerenti il processo di ottimizzazione.

[x,fval,exitflag,output]=fminsearch(P1,P2), dove P1 Pn sono parametri della funzione obiettivo

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 considerazioni per fminunc.. ma i pi usati sono:

Options

Output Arguments

Esempio 1

Minimizzazione della funzione di Rosenbrock: x0=[-1.2, 1]

Presenta minimo (1,1) ed fval=0

-Scriviamo lM.file: function f= myfun(x)f=

-Passiamo dallM.file alla routine di ottimizzazione:[x,fval] = fminsearch (f , [-1.2, 1] )

OPPURELa definiamo nella command window

100*(x(2)-x(1)^2)^2+(1-x(1))^2;

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)

Vantaggi e limiti

Vantaggi: se f(x) discontinua, fminsearch un

comando 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

MINIMIZZAZIONE VINCOLATAMINIMIZZAZIONE VINCOLATAfminconfmincon

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 associaun numero reale). Le funzioni f(x), c(x) e ceq(x) possono esserenon lineari.

sintassi input

x=fmincon(fun,x0,A,b) partendo da x0 cerca il minimo x della funzione funsotto i vincoli lineari A*x

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

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(...)

-active-set (DEFAULT)

-interior-point

-trust-region-reflective SE SPECIFICATOMA BISOGNA DARE IL JACOBIANO

ALGORITMI

Esempio 1

Minimizzare f(x)=-x1x2x3x0 = [10; 10; 10]Vincolo: 1 2 30 2 2 72x x x + +

1.Scrivo m file myfun_vin.m

function f = myfun_vin(x)f = -x(1) * x(2) * x(3);

min F(x) vincoli: A*x

>> 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

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

>>[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)

Esempio 3

M-files:

Command window

Risoluzione di sistemi di equazioni

fsolve e fzero:

fsolve : risoluzione di sistemi non lineari di equazioni: con x vettore e F(X) che ritorna un valore vettoriale (determinazione delle radici (zero) di un sistema non lineare di equazioni)

Sintassi

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 exitflag:

Caratteristiche Caratteristiche delldellalgoritmo algoritmo utilizzatoutilizzato

Output:Informazioni circa Informazioni circa il processo di il processo di ottimizzazioneottimizzazione

Algoritmo Per default viene utilizzato Trust-region dogleg.

Alternativamente, si puo scegliere Levenberg-Marquardt oppure Gauss-Newton.

Esempio 1

Sistema di equazioni in 2 incognite:

Risolviamo in x:

Scriviamo un M.file:

Routine di ottimizzazione:

xx00=[=[--5,5,--5]5]

Esempio 2 Trovare una matrice X tale che:

con x0=[1,1;1,1] (matrice)

Scrittura dellM.file:

Invochiamo la routine di ottimizzazione:

x= fval=

exitflag=1

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 Soluzioni di una funzione continua di una

variabile Sintassi:

Descrizione: x=fzero(fun,xo), determina lo zero di fun vicino ad xo,

se xo uno scalare. fun una funzione descritta da M.file o da una funzione anonima. Il valore xdeterminato da fzero vicino al punto per cui la funzione fun cambia segno, o NaN se la ricerca non ammette risultato.

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

Output arguments

Esempi Calcolare il valore di determinando lo zero

della funzione seno vicino al punto 3

Trovare lo zero della funzione coseno nellintervallo [1 2]

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 di zero coniugate

Trovare lo zero della funzione:

Limiti

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 di intersezione di fun con lasse x. Punti per cui la funzione tocca lasse, ma non lo intercetta non sono considerati zero. Esempio la funzione x^2 una parabola che tocca lasse x nello zero. Non attraversando lasse x, il punto non viene visto come soluzione.