Você está na página 1de 29

Captulo 1

Introduccin
1.1 Qu es la Toolbox de Optimizacin?
La Optimization Toolbox es una coleccin de funciones que extienden la capacidad de MATLAB. Esta toolbox
incluye rutinas para diversos tipos de optimizacin incluyendo:
Minimizacin no lineal sin restricciones.
Minimizacin no lineal con restricciones.
Programacin cuadrtica y lineal.
Ajuste de curvas por mnimos cuadrados.
Resolucin de sistemas de ecuaciones no lineales.
Mnimos cuadrados con restricciones.
Todas las funciones de la toolbox, estn realizadas en mediante cdigo de MATLAB, puedes ver el cdigo de
esas funciones mediante la instruccin
type function_name
Obviamente, se pueden extender las capacidades de la toolbox escribiendo cdigo propio mediante cheros
M, o utilizando la toolbox en combinacin con otras toolboxes, o con MATLAB o Simulink.La Optimizacin est
orientada a la minimizacin o maximizacin de funciones. La Toolbox de optimizacin consiste en un conjunto
de funciones que realizan la minimizacin (o maximizacin) de funciones no lineales en general. Tambin se
proporcionan funciones para resolver problemas de ecuaciones no lineales y ajuste de datos (mnimos cuadrados).
Esta introduccin incluye las siguientes secciones:
Problemas abarcados por la Toolbox
Uso de las funciones de optimizacin.
1.2 Problemas tratados
Las tablas siguientes resumen las funciones disponibles para minimizacin, resolucin de ecuaciones y problemas
de mnimos cuadrados.
Observacin 1 La siguiente tabla indica los tipos de problemas en orden creciente de complejidad:
1
2 Captulo 1. Introduccin
Tipo Notacin Funcin
Minimizacin Univariante
_
_
_
minf (x)
x ]a, b[
fminbnd
Minimizacin sin restricciones
_
_
_
minf (x)
x R
n
fminunc, fminsearch
Programacin Lineal
_

_
minc
T
x
Ax b
A
e
x = b
e
l x u
linprog
Programacin Cuadrtica
_

_
min
1
2
x
T
Hx +c
T
x
Ax b
A
e
x = b
e
l x u
quadprog
Minimizacin con restricciones
_

_
minf (x)
g (x) 0
h(x) = 0
Ax b
A
e
x = b
e
l x u
fmincon
Tabla 1.1: Tabla 1-1: Minimizacin
Tipo Notacin Funcin
Ecuaciones Lineales
_

_
Ax = b
n ecuaciones
n variables
\ (Barra invertida)
Ecuacin lineal de una variable

f (x) = 0 fzero
Sistemas de ecuaciones no lineales

F(x) = 0 fsolve
Tabla 1.2: Tabla 1-2: Resolucin de ecuaciones
Tipo Notacin Funcin
Mnimos cuadrados lineales
_

_
minkAx bk
2
2
m ecuaciones
n variables
\ (Barra invertida)
Minimos cuadrados lineales no negativos
_

_
minkAx bk
2
2
x 0
m ecuaciones
n variables
lsqnonneg
Mnimos cuadrados lineales con restricciones
_

_
minkAx bk
2
2
Ax b
A
e
x = b
e
l x u
m ecuaciones
n variables
lsqlin
Mnimos cuadrados no lineales

minkF(x)k
2
2
=
1
2
P
i
F
i
(x)
l x u
lsqnonlin
Ajuste de curvas no lineal

minkF(x, y) yk
2
2
l x u
lsqcurvet
Tabla 1.3: Tabla 1-3: Ajuste de curvas
c Silvestre Paredes Hernndez
1.3. Ejemplos 3
La mayora de estas rutinas de optimizacin necesitan la denicin de un chero de tipo M, que incluya la
denicin de la funcin que hay que minimizar, i.e., la funcin objetivo. De forma alternativa, se puede crear
un objeto inline creado a partir de una expresin de MATLAB. La maximizacin se obtiene indicando la rutina
con f, donde f es la funcin que hay que optimizar.
Las opciones de optimizacin que se pueden indicar en las rutinas cambian los parmetros de optimizacin.
Los parmetros de optimizacin utilizados por defectos son los ms usuales, pero pueden cambiarse a travs de
una estructura de opciones.
El gradiente se calcula mediante un mtodo de diferencias nito adaptativo, a menos que se proporcione
a travs de una funcin. Tambin se pueden incluir parmentros directamente a las funciones, eliminando la
necesidad de utilizar variables globales.
Se distinguen dos tipos de algoritmos: algoritmos de gran escala y algoritmos de escala media. Este no es un
trmino estndar, y se utiliza solamente para diferenciarse de los algoritmos de gran escala, que se han diseado
explcitamente para manejar problemas de gran escala ecientemente.
En este curso solamente utilizaremos las opciones y algoritmos de escala media. Las funciones de la Toolbox
de Optimizacin continen diferentes de algoritmos multivariante, as como diferentes estrategias de bsquedad
lineal. El algoritmo principal para minimizacin con restricciones son el mtodo simplex de Nelder-Mead, y el
mtodo cuasi-Newton de BFGS (Broyden, Fletcher, Goldfarb, y Shanno).
Para la minimizacin con restricciones se utilizan variaciones de un algoritmo de programacin cuadrtica
secuencial. Mientras que se utilizarn los algoritmos de Gauss-Newton y Levenberg-Marquardt para problemas
de mnimos cuadrados no lineales.
Adems se da la opcin de elegir la estrategia de bsqueda lineal para minimizacin sin restricciones y
para problemas de mnimos cuadrados no lineales. Las estrategias de bsqueda lineal utilizan mtodos de
interpolacin cbicos y cuadrticos con control (safeguarded methods).
1.3 Ejemplos
En esta seccin se presentan los algoritmos estndar a travs de un manual. El manual trata las funciones
fminunc y fmincon con detalle. El resto de rutinas de optimizacin se utilizan de la misma forma, solamente
con diferencias en los problemas que pueden tratarse y en los criterios de terminacin. Esta seccin incluye los
siguientes ejemplos:
Ejemplo sin restricciones.
Ejemplo con restricciones no lineales de desigualdad.
Ejemplo con restricciones y cotas en las variables.
Ejemplo con restricciones, utilizando el gradiente.
Comprobacin del gradiente: Analtico versus numrico
Tambin se discute acerca de:
Maximizacin.
Restricciones de mayor o igual que cero.
Argumentos adicionales: prescindiendo de Variables Globales.
1.3.1 Problema sin restricciones
Consideremos el problema de encontrar un conjunto de valores [x

1
, x

2
] que resuelva el problema
Minimizar f (x) = e
x
1

4x
2
1
+ 2x
2
2
+ 4x
1
x
2
+ 2x
2
+ 1

(1.1)
Para resolver este problema dos-dimensional, escribimos un chero de tipo M (M-le), que devuelva el valor
de la funcin. Despus, se utilizar la rutina de minimizacin sin restricciones fminunc.
Paso 1: Write an M-le objfun.m
c Silvestre Paredes Hernndez
4 Captulo 1. Introduccin
function f=objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
Paso 2: Utilizar una funcin de optimizacin sin restricciones
x0 = [-1,1]; % Starting guess
options = optimset(LargeScale,off);
[x,fval,exitflag,output] = fminunc(@objfun,x0,options);
Despus de 40 evaluaciones de la funcin, se obtiene como solucin
x =
0.5000 -1.0000
El valor de la funcin en la solucin se almacena en la variable fval.
fval =
1.3030e-10
La variable exitag indica si el algoritmo converge. Un valor de exitag > 0 indica que se ha localizado
un mnimo local.
exitflag =
1
La estructura output proporciona ms detalles respecto al proceso de optimizacin. En el caso de fmiunc,
incluye el nmero de iteraciones del proceso en iterations, el nmero de evaluaciones de la funcin en fun-
Count, el tamao de paso nal en step-size, la norma innita del gradiente en la solucin en rstorderopt,
y el tipo de algoritmo utilizado en algorithm.
output =
iterations: 7
funcCount: 40
stepsize: 1
firstorderopt: 9.2801e-004
algorithm: medium-scale: Quasi-Newton line search
Cuando la funcin tiene ms de un mnimo local, el valor inicial para el vector [x
1
, x
2
], afecta al nmero de
evaluaciones de la funcin y al valor del punto solucin. En el ejemplo anterior, x
0
se ha inicializado al valor
[1, 1]. La variable options puede utilizarse para cambiar las caractersticas del algoritmo de optimizacin,
como en
x = fminunc(@objfun,x0,options);
options es una estructura que contiene valores para el error permitido y la eleccin del algoritmo. Se puede
generar una estructura de este tipo mediante la funcin optimset.
c Silvestre Paredes Hernndez
1.3. Ejemplos 5
options = optimset(LargeScale,off);
En este ejemplo hemos desactivado la seleccin de algoritmo a gran escala y por tanto se ha utilizado el
algoritmo estndar (escala media). Otras opciones de optimizacin incluyen el control sobre la cantidad de
informacin presentada durante cada iteracin del proceso, los criterios de tolerancia o error permitido, si el
usuario va a introducir el gradiente o el Jacobiano, y el mximo nmero de iteraciones o evaluaciones de la
funcin, posteriormente se ver algn parmetro ms de optimizacin y ms informacin al respecto.
1.3.2 Problema con restricciones de desigualdad
Supongamos que aadimos restricciones de desigualdad en el ejemplo dado en la ecuacin 1.1, en ese caso el
problema resultante puede resolverse mediante la funcin fmincon. Por ejemplo, Encontrar la x que resuelva el
problema
Minimizar f (x) = e
x
1

4x
2
1
+ 2x
2
2
+ 4x
1
x
2
+ 2x
2
+ 1

Sujeto a x
1
x
2
x
1
x
2
1.5
x
1
x
2
10
(1.2)
Puesto que ninguna de las restricciones es lineal, no se pueden pasar las restricciones a la funcin fmincon
directamente en la lnea de comando. En este caso tenemos que crear un segundo chero M-le, que llamaremos
confun.m que devuelva en una variable, el valor de ambas restricciones en el valor actual de x. Despus se
utiliza la funcin de optimizacin con restricciones, fmincon. Como fmincon espera que las restricciones estn
escritas en la forma
g (x) 0
habr que re-escribir las restricciones de la siguiente forma:
x
1
x
2
x
1
x
2
+ 1.5 0
x
1
x
2
10 0
(1.3)
Paso 1: Write an M-le confun.m para las restricciones
function [c, ceq] = confun(x)
% Restricciones de desigualdad
c = [1.5 + x(1)*x(2) - x(1) - x(2);
-x(1)*x(2) - 10];
% Restricciones de igualdad
ceq = [];
Paso 2: Utilizar una funcin de optimizacin coin restricciones
x0 = [-1,1]; % Starting guess
options = optimset(LargeScale,off);
[x, fval] = ...
fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);
Despus de 38 evaluaciones de la funcin, la solucin x

, proporcionada y su valor objetivo son:


x =
-9.5474 1.0474
fval =
0.0236
c Silvestre Paredes Hernndez
6 Captulo 1. Introduccin
Podemos evaluar las restricciones en la solucin de la forma:
[c,ceq] = confun(x)
c=
1.0e-15 *
-0.8882
0
ceq =
[]
Notar que en ambas restricciones el valor es menor o igual que cero, es decir, x satisface
c (x) 0
1.3.3 Ejemplo de restricciones con cotas en las variables
Las variables del vector x pueden estar restringidas a ciertos valores especicando restricciones de tipo cota.
Para fmincon, el comando
x = fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options);
indica que la variable x est acotada dentro del rango lb x ub.
Para indicar en el ejemplo anterior (ecuacin 1.2), que las variables deben ser mayores o iguales que cero
(i.e. x
1
0, x
2
0), utilizamos el los siguientes comandos:
x0 = [-1,1]; % Valor inicial
lb = [0,0]; % Indica las cotas inferiores
ub = [ ]; % No hay cotas superiores
options = optimset(LargeScale,off);
[x,fval = ...
fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options)
[c, ceq] = confun(x)
Notar que para pasar los lmites inferiores como el sptimo argumento de la funcin fmincon, hay que
especicar valores para los argumentos tercero al sexto. En este ejemplo, se utiliza la matriz vaca [], como valor
de esos argumentos puesto que no hay ni desigualdades, ni igualdades lineales.
Despus de 13 evaluaciones de la funcin, la solucin obtenida:
x =
0 1.5000
fval =
8.5000
c =
0
-10
ceq =
[]
c Silvestre Paredes Hernndez
1.3. Ejemplos 7
Cuando lb o ub contienen menos elementos que x, solamente los primeros elementos correspondientes en esta
variable estarn acotados. De la misma forma, si solamente hay algunas variables acotadas, podemos utilizar
-inf en lb para variables no acotadas inferiormente e inf en ub para variables no acotadas superiormente. Por
ejemplo
lb = [-inf 0];
ub = [10 inf];
produce x
1
10 y 0 x
2
(x
1
no tiene lmites inferiores y x
2
no tiene lmites usperiores). Utilizar inf y -inf
proporciona resultados numricos mejores que utilizar nmeros positivos o un nmeros negativos muy grande
para indicar la ausencia de cota en las variables.
Notar que el nmero de evaluaciones de la funcin necesarias para encontrar la solucin se ha reducido,
puesto que se ha restringido el espacio de bsqueda. Se utilizan menos evaluaciones de la funcin cuando el
problema tiene ms restricciones y cotas en las variables puesto que la optimizacin realiza mejores decisiones
que para el caso sin restricciones. Es por tanto, una buena prctica acotar y condicionar los problemas, cuando
sea posible, para producir una rpida convergencia a la solucin.
1.3.4 Ejemplo de problema con restricciones utilizando el gradiente
Normamente los algoritmos estndar de las rutinas de minimizacin utilizan gradientes numricos calculado
mediante aproximaciones en diferencias nitas. Este procedimiento perturba sistemticamente cada variable
para calcular las derivadas parciales de la funcin objetivo y de las restricciones. Alternativamente, se puede
proporcionar una funcin para el clculo de las derivadas de forma analtica. En este caso, el problema se
resuelve de forma ms precisa y eciente.
Para resolver el problema 1.2, utilizando el gradiente de forma analtica, hay que hacer lo siguiente:
Paso 1: Escribe un chero M para la funcin objetivo y el gradiente
function [f,G] = objfungrad(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
% Gradiente de la f. objectivo
t = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
G = [ t + exp(x(1)) * (8*x(1) + 4*x(2)),
exp(x(1))*(4*x(1)+4*x(2)+2)];
Paso 2: Escribe un chero M, para las restricciones no lineales y sus gradientes
function [c,ceq,DC,DCeq] = confungrad(x)
c(1) = 1.5 + x(1) * x(2) - x(1) - x(2); % Restricciones de desigualdad
c(2) = -x(1) * x(2)-10;
% Gradiente de las restricciones
DC= [x(2)-1, -x(2);
x(1)-1, -x(1)];
% Restricciones de igualdad no lineales
ceq=[];
DCeq = [ ];
G, contiene la derivada parcial de la funcin objetivo, f, y calculada en la funcin objfungrad( x), con respecto
a cada elemento de x
f
x
=
_
_
e
x1

4x
2
1
+ 2x
2
2
+ 4x
1
x
2
+ 2x
2
+ 1

+ e
x1
(8x
1
+ 4x
2
)
e
x
1
(4x
1
+ 4x
2
+ 2)
_
_
(1.4)
c Silvestre Paredes Hernndez
8 Captulo 1. Introduccin
Las columnas de DC contienen las derivadas parciales para cada restriccin (i.e., la isima columna de DC
es la derivada parcial de la isima restriccin respecto a x). Por tanto en el ejemplo anterior, DC es:
_

_
c
1
x
1
c
2
x
1
c
1
x
2
c
2
x
2
_

_
=
_
_
x
2
1 x
2
x
1
1 x
1
_
_
(1.5)
Puesto que se ha proporcionado el gradiente de la funcin objetivo en objfungrad.m y el gradiente de las restric-
ciones en confungrad.m, hay que indicarle a la funcin fmincon que esos cheros M, contienen esa informacin
adicional. Utilizaremos la funcin optimset para cambiar el valor de los parmetros GradObj y GradConstr por
on, en la estructura options del ejemplo
options = optimset(options,GradObj,on,GradConstr,on);
Si no se cambia el valor de estos parmetros por on la funcin fmincon no utilizar los gradientes analticos.
Los argumentos lb y ub, indican las cotas inferiores y superiores de la variable independiente x. En este
ejemplo no tenemos de este tipo de restricciones, de modo que se utiliza la opcin []
Paso 3: Llamar a la rutina de optimizacin con restricciones
x0 = [-1,1]; % Valor inicial
options = optimset(LargeScale,off);
options = optimset(options,GradObj,on,GradConstr,on);
lb = [ ]; ub = [ ]; % No hay cotas
[x,fval] = fmincon(@objfungrad,x0,[],[],[],[],lb,ub,...
@confungrad,options)
[c,ceq] = confungrad(x) % Valor de las restricciones en x
Despus de 20 evaluaciones de la funcin la solucin obtenida es:
x =
-9.5474 1.0474
fval =
0.0236
c =
1.0e-14 *
0.1110
-0.1776
ceq =
[]
1.3.5 Vericacin del gradiente: Analtico vs. Numrico
Cuando se determinan los gradientes de forma analtica, podemos compararlos sus valores en un punto con los
correspondientes valores obtenidos mediante evaluacin de diferencias nitas. Esta propiedad es bastante til
para detectar errores en la formulacin bien de la funcin objetivo o bien de los gradientes.
c Silvestre Paredes Hernndez
1.3. Ejemplos 9
Si queremos que esta comprobacin se efecte, entonces hay que modicar el valor del parmetro Derivati-
veCheck por on, utilizando la funcin optimset.
options = optimset(options,DerivativeCheck,on);
En el primer ciclo de la optimizacin se comprueba el valor de los gradiente obtenidos de forma analtica (de
la funcin objetivo, y si existen, de las restricciones no lineales). Si existe una discrepancia muy grande entre
ambos valores, dentro de una tolerancia dada, aparece un mensaje de advertencia indicando la discrepancia y
dando la oportunidad de parar el proceso de optimizacin.
1.3.6 Ejemplo de restricciones de igualdad
Para las rutinas que permiten restricciones de igualdad, las restricciones no lineales de este tipo deben calcularse
en el chero M, junto con las restricciones de desigualdad. Para igualdades lineales, solamente se necesitan los
coecientes que se pasan a la funcin a travs de una matriz Aeq, y de un vector de trminos independientes
beq.
Por ejemplo, si tenemos la restriccin de igualdad no lineal
x
2
1
+ x
2
1
= 1
y la restriccin no lineal de desigualdad
x
1
x
2
10
se reescriben en primer lugar como
x
2
1
+ x
2
1
1 = 0
x
1
x
2
10 0
y resolvemos el problema mediante los siguientes pasos:
Paso 1: Escribimos un chero M, llamado objfun.m
function f = objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
Paso 2:Escribimos un chero M, para las restricciones no lineales confuneq.m
function [c, ceq] = confuneq(x)
% Restricciones de desigualdad no lineales
c = -x(1)*x(2) - 10;
% Restricciones de igualdad lineales
ceq = x(1)^2 + x(2) - 1;
Paso 3: Utilizamos la rutina de optimizacin con restricciones
x0 = [-1,1]; % Valor inicial
options = optimset(LargeScale,off);
[x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],...
@confuneq,options)
[c,ceq] = confuneq(x) % Comprobamos el valor de las restricciones en x
Despus de 21 evaluaciones de la funcin, la solucin obtenida es:
c Silvestre Paredes Hernndez
10 Captulo 1. Introduccin
x =
-0.7529 0.4332
fval =
1.5093
c =
-9.6739
ceq =
4.0684e-010
Notar que ceq es igual que 0 dentro del margen de tolerancia de las restricciones que es de 1.0e 006, y que
c es menor o igual que cero como se requera.
1.3.7 Maximizacin
Las funciones de optimizacin fminbnd, fminsearch, fminunc, fmincon, lsqcurvet y lsqnonlin realizan la mi-
nimizacin de la funcin objetivo, f (x). La maximizacin se puede conseguir mediante una funcin M, que
devuelva f (x). De forma similar, para alcanzar la maximizacin para quadprog se utiliza H y f, y para
linprog f.
1.3.8 Restricciones de mayor o igual
La toolbox de Optimziacin asume que las restricciones no lineales de desigualdad son del tipo
g
i
(x) 0
para utilizar restricciones del tipo
g
i
(x) 0
debe multiplicarse por 1, para conseguir una restriccin del tipo menor o igual. Por ejemplo, una restriccin del
tipo g
i
(x) 0, es equivalente a la restriccin g
i
(x) 0; una restriccin de la forma g
i
(x) b, es equivalente
a la restriccin g
i
(x) b 0.
1.3.9 Argumentos adicionales: variables globales
Se pueden indicar parmetros adicionales en las rutinas de optimizacin para aplicarse a funciones denida a
travs de parmetros y sin necesidad de emplear variables globales. Estos parmetros deben indicarse al nal
de la llamada a la rutina de optimizacin.
Por ejemplo, la introduccin de variables al nal de la llamada a la rutina fsolve
[x,fval] = fsolve(@objfun,x0,options,P1,P2,...)
incluye los argumentos directamente en la funcin objfun
F = objfun(x,P1,P2, ... )
Consideremos, por ejemplo, la bsqueda de los ceros de la funcin ellipj(u,m). La funcin necesita un
parmetro m, as como una entrada u. Si queremos buscar un cero cerca del valor u = 3, para m = 0.5,
utilizaremos
c Silvestre Paredes Hernndez
1.4. Cambios en los parmetros 11
m = 0.5;
options = optimset(Display,off); % Sin salidas
x = fsolve(@ellipj,3,options,m)
que devuelve
x =
3.7081
Y en este caso, el valor de la funcin ellipj
f = ellipj(x,m)
f =
-2.9925e-008
La utilizacin de la funcin optimset se hace para obtener todos los parmetros predeterminados que la
funcin fsolve tiene. Esta llamada implica, adems que se utilizan los errores de tolerancia por defecto y que
no se utilizarn los gradientes analticos.
1.4 Cambios en los parmetros
La estructura options contiene parmetros utilizados en las rutinas de optimizacin. Si, en la primera llamada
a una rutina de optimizacin, no se proporciona la estrutura options, o es una matriz vaca, se genera entonces,
un conjunto de parmetros predeterminados. Algunas de las opciones por defecto de los parmetros se calculan
en base a factores relacionados con la dimensin del problema, tales como MaxFunEvals. Algunos parmetros
dependen de la rutina de optimziacin elegida, y su descripcin se proporcionar posteriormente en la referencia
a la funcin correspondiente.
1.4.1 Cambios en los parmetros predeterminados
La funcin optimset crea o actualiza una variable options que puede incluirse en las funciones de optimizacin.
Los argumentos de esta funcin son pares de nombres de parmetros y valores de parmetros, tales como TolX y
1e4. Cualquier propiedad no especicada utilizar el valor por defecto. Tampoco se necesita escribir el nombre
completo del parmetro, solamente una cantidad suciente para determinar el nombre de forma inequvoca. El
tipo de letra, mayscula o minscula, se ignora para los nombres de los parmetros. Sin embargo para los valores
de los parmetros que son cadenas de caracteres, si hay distincin y es necesario incluir la palabra exacta.
Se puede utilizar la instruccin help optimset para extraer informacin de los diferentes parmetros utilizados
y cmo utilizar la funcin.
A continuacin se inlcuyen algunos ejemplos del uso de optimset.
Mostrar todos los parmetros
La funcin optimset devuelve todos los parmetros que pueden modicarse, junto con los valores tpicos y los
valores por defecto.
Determinacin de los parmetros utilizados por una funcin
La estructura options determina los parmetros que pueden ser utilizados por las funciones de la toolbox.
Como todas las funciones no utilizan todos los parmetros, puede ser bastante til encontrar qu parmetros
son utilizados por una funcin particular.
Para determinar que campos de la estructura options son utilizados por una funcin particular, incluimos
el nombre de la funcin a optimset, por ejemplo, para fmincon
c Silvestre Paredes Hernndez
12 Captulo 1. Introduccin
optimset(fmincon)
o bien
optimset fmincon
Esta instruccin devuelve una estructura. Los campos no utilizados por la funcin estn vacos ([]); mientras
que los campos utilizados por la funcin contienen los valores por defecto para ella.
Presentacin de resultados intermedios
Para obtener resultados intermedios en cada iteracin, se utiliza
options = optimset(Display, iter);
Este comando modica el campo Display de options por iter, que provoca que la toolbox presente informa-
cin del proceso de optimizacin en cada iteracin. Tambin se puede desactivar con o, solamente obtener
los datos al nal del proceso con nal, o proporcionar informacin solamente cuando en el problema no se
produzca la convergencia con notify.
Optimizacin estndar
Aunque se puede emplear la toolbox de optimizacin de MATLAB, para resolver problemas especiales de
los llamados Large-Scale, solamente utilizaremos algoritmos estndar para minimizacin de problemas usuales;
puesto que la opcin por defecto de MATLAB es la resolucin de problemas a gran escala (Large-Scale Problems),
es necesario cambiar esta opcin mediante la siguiente instruccin:
options = optimset(LargeScale, off);
Inclusin de ms de un parmetro
Se pueden modicar mltiples parmetros con una sola llamada a optimset. Por ejemplo, para modicar la
salida y la tolerancia en el valor de x, conjuntamente podemos utilizar la instruccin:
options = optimset(Display, iter, TolX, 1e-6);
Actualizacin de una estructura options
Para actualizar una estructura options ya existente, se puede incluir esta estructura como primer argumento de
optimset:
options = optimset(options, Display, iter, TolX, 1e-6);
c Silvestre Paredes Hernndez
1.5. Optimizacin de objetos inline 13
Obtencin de los valores de los parmetros
Podemos obtener los valores de cada parmetro en la estructura options, mediante la funcin optimget. Por
ejemplo, para obtener la opcin actual de salida, introducimos
verbosity = optimget(options, Display);
La funcin optimset devolver el valor del campo Display y lo asignar a la variable verbosity.
1.5 Optimizacin de objetos inline
Las funciones de la Toolbox de Optimizacin tambin realizan la optimizacin de objetos inline, de esta forma
podemos evitar la creacin de un chero M, para denir las funciones.
Para representar una funcin matemtica en la lnea de comandos, crearemos un objeto inline a partir de
una expresin alfanumrica. Por ejemplo, podemos crear un objeto inline de la funcin humps (utilizar el
comando humps para conocer a esta funcin).
f = inline(1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 + 0.04)-6);
Podemos ahora evaluar la funcin f en el punto 2.0
f(2.0)
ans =
-4.8552
Y se puede utilizar la funcin f con una rutina de optimizacin para obtener su mnimo:
x = fminbnd(f, 3, 4)
Tambin es posible crear funciones de ms de un argumento mediante inline, indicando los nombres de los
argumentos de entrada dentro de la expresin alfanumrica. Por ejemplo, para utilizar lsqcurvet, se necesita
una funcin que tenga dos argumentos de entrada, x y xdata
f= inline(sin(x).*xdata +(x.^2).*cos(xdata),x,xdata)
x = pi; xdata = pi*[4;2;3];
f(x, xdata)
ans =
9.8696e+000
9.8696e+000
-9.8696e+000
y despus llamar a la funcin lsqcurvet
% Si asumimos que la variable ydata existe
x = lsqcurvefit(f,x,xdata,ydata)
c Silvestre Paredes Hernndez
14 Captulo 1. Introduccin
Aqu se presentan otro ejemplo que utiliza la misma tcnica:
Una ecuacin matricial
x = fsolve(inline(x*x*x-[1,2;3,4]),ones(2,2))
Un problema de mnimos cuadrados
x = lsqnonlin(inline(x*x-[3 5;9 10]),eye(2,2))
c Silvestre Paredes Hernndez
Captulo 2
Referencia de funciones
A continuacin se describen algunas funciones de la toobox de optimizacin y que son las utilizadas durante el
curso. Se ha incluido alguna funcin adicional para que el lector pueda practicas con la toolbox.
2.1 Parmetros de Optimset
En esta primera seccin se indican los diferentes parmetros empleados en el proceso de optimizacin y que
pueden modicarse mediante la funcin optimset.
Parmetro Descripcin Funciones que lo utilizan
DerivativeCheck Compara el gradiente analtico con el numrico, fmincon, fminunc, fsolve
calculado mediante diferencias nitas. lsqcurvet, lsqnonlin.
Diagnostics Proporciona informacin sobre la funcin objetivo. Todas salvo: fminbnd, fminsearch,
fzero y lsqnonneg.
DiMaxChange Mximo cambio permitido para el clculo de fmincon, fminunc, fsolve,
derivadas por diferencias nitas. lsqcurvet, lsqnonlin.
DiMinChange Mnimo cambio permitido para el clculo de fmincon, fminunc, fsolve,
derivadas por diferencias nitas. lsqcurvet, lsqnonlin.
Display Nivel de informacin: Todas
o no hay informacin;
iter informacin en cada iteracin;
nal iteracinnal;
display informacin en caso de no convergencia.
GradConstr Indica si se utilizan los gradientes analticos fmincon.
de las restricciones. Hay que denirlos.
GradObj Indica si se utiliza el gradiente analtico de la fmincon, fminunc.
funcin objetivo. Hay que denirlo.
HessUpdate Tipo de algoritmo multivariante: fminunc.
bfgs Algoritmo BFGS;
dfp Algortimo DFP;
steepdesc Algoritmo del Gradiente.
15
16 Captulo 2. Referencia de funciones
Parmetro Descripcin Funciones que lo utilizan
LargeScale on: Utiliza algoritmos large-scale. fmincon, fminunc, fsolve,
o: Utiliza algoritmos estndar. linprog, lsqcurvet, lsqlin,
lsqnonlin, quadprog.
LevenbergMarquardt on Algoritmo de Levenberg-Marquardt. fsolve, lsqcurvet, lsqnonlin.
o Algoritmo de Gauss-Newton.
LineSearchType quadcubic Bsqueda lineal cuadrtico-cbica. fminunc, fsolve,
cubicpoly Bsqueda lineal cbica. lsqcurvet, lsqnonlin.
MaxFunEvals Mximo nmero de evaluaciones fminbnd, fmincon, fminsearch,
de la funcin permitido. fminunc,fsolve, lsqcurvet,
lsqnonlin.
MaxIter Mximo nmero de iteraciones permitido. Todas salvo fzero y lsqnonneg.
TolCon Mximo error permitido en el fmincon.
incumplimiento de las restricciones.
TolFun Criterio de terminacin fmincon, fminsearch, fminunc,
para la funcin objetivo. fsolve, lsqcurvet, lsqnonlin.
TolX Criterio de terminacin en x. Todas salvo: linprog, lsqlin y
quadprog.
2.2 Descripcin de las funciones utilizadas
En esta seccin se describe particularmente cada funcin de la toolbox, utilizada en el curso.
2.2.1 fminbnd
Objetivo: Encontrar el mnimo de una funcin de una variable dentro de un intervalo prejado, es decir,
busca soluciones al problema.
Minimizar f (x)
x
1
< x < x
2
donde x, x
1
y x
2
son reales y f (x) es una funcin que devuelve un nmero real.
Sintxis:
Forma simple: sol = fminbnd(fun,x1,x2)
Forma Completa: [sol,fsol,exitag,output] = fminbnd(fun,x1,x2,opciones,P1,P2,...)
Argumentos:
Argumentos de Entrada:
fun funcin objetivo del problema, es una funcin que acepta un valor real x y devuelve otro valor f, que
es el valor de la funcin en x. Puede ser un chero .m que dena la funcin, en este caso se utiliza
el cdigo
x=fminbnd(@fun,....)
o puede ser un objeto inline.
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 17
Vemos a continuacin un ejemplo de chero .m
function f=nombre( x)
% Denimos la funcin x
2
+ 2x + 1
f = x^2 +2*x+1;
y la misma funcin denida mediante un objeto inline
fun = inline( x^2 +2* x+1)
Para un objeto inline solamente es necesario el nombre de ese objeto
x=fminbnd(fun,....)
x1,x2 son los extremos del intervalo.
opciones Estructura que contiene los parmetros del proceso de optimizacin. Las opciones aceptadas
por fminbnd son: Display, MaxFunEvals, MaxIter y TolX..
P1,P2,... son argumentos que pueden pasarse a la funcin.
Argumentos de Salida:
sol es la solucin del problema, es decir, es el mnimo de f (x) en el intervalo ]x
1
, x
2
[ (siempre que haya
convergencia).
fsol es el valor de f (x) en sol.
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
Observaciones: El algoritmo utilizado por fminbnd est basado en el mtodo de la seccin urea y en la
interpolacin parablica. La funcin objetivo debe ser continua. fminbnd solamente encuentra mnimos
locales.
2.2.2 fmincon
Objetivo: Encontrar el mnimo de una funcin de varias variables con restricciones. Busca soluciones al
problema.
Minimizar f (x)
Sujeto a
g (x) 0
h(x) = 0
Ax b
A
e
x = b
e
lb x ub
donde x, b, b
e
, lb y ub son vectores, A y A
e
son matrices, g (x) y h(x) son funciones vectoriales, de
dimensiones p y m, respectivamente y f (x) es una funcin real multivariante. Las funciones f (x), g (x)
y h(x) pueden ser funciones no lineales.
Sintxis:
Forma simple: sol = fmincon(fun,x0,A,b)
c Silvestre Paredes Hernndez
18 Captulo 2. Referencia de funciones
Forma Completa: [sol,fsol,exitag,output,lambda,grad,hess] = ...
fmincon(fun,x0,A,b,A
e
,b
e
,lb,ub,nonlcon,opciones,P1,P2,...)
Argumentos:
Argumentos de Entrada:
fun funcin objetivo del problema, es una funcin que acepta un vector real x y devuelve otro valor f,
que es el valor de la funcin en x. Puede ser un chero .m que dena la funcin, en este caso se
utiliza el cdigo
x=fmincon(@fun,....)
Vemos a continuacin un ejemplo de chero .m
function f=nombre( x)
% Denimos la funcin x
2
+ y
2
f = x(1)^2 +x(2)^2+1;
y la misma funcin denida mediante un objeto inline
fun = inline( x(1)^2 + x(2)^2)
de nuevo en este caso solamente es necesaria el nombre del objeto
x=fmincon(fun,....)
Si el gradiente de fun puede calcularse, y la opcin GradObj se activa mediante la instruccin
opciones = optimset(GradObj,on)
entonces la funcin fun, debe suministrar, en el segundo argumento de salida, el valor del gradiente
gf, en el vector x. Hay que observar que una comprobacin del nmero de argumentos que devuelve
la funcin, valor que se obtiene en la variable nargout, podemos evitar el clculo de este gradiente
cuando la funcin fun se utiliza con un slo argumento de salida (cuando el algoritmo solamente
necesite el valor de f, pero no el de gf. Por ejemplo
function [f,gf ]=nombre( x)
% Denimos la funcin x
2
+ y
2
f = x(1)^2 +x(2)^2+1;
% Denimos el gradiente [2x, 2y],
% solamente cuando sea necesario:
if nargout>1
gf = [2*x(1), 2*x(2)];
end
x0 es la aproximacin inicial de la solucin o punto de partida del algoritmo.
A,b Matriz de coecientes y vector de trminos independientes asociados a las restricciones lineales de
.
A
e
,b
e
Matriz de coecientes y vector de trminos independientes asociados a las restricciones lineales de
=.
lb,ub vector de cotas inferiores y superiores asociadas a las variables del problema de forma que
lb(i) x(i) ub(i)
estos valores pueden ser inf y +inf, cuando la componente correspondiente no est acotada inferior
o superiormente respectivamente.
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 19
nonlcon es la funcin que calcula las restricciones no lineales del problema en un punto. Es una funcin
que acepta un vector real x y devuelve dos vectores [rd, ri], que son los valores de las restricciones de
desigualdad, g (x) 0, e igualdad, h(x) = 0, no lineales del problema en x. El vector rd contiene
las funciones de desigualdad evaluadas en x, ser por tanto un vector pdimensional; mientras que
ri, contiene el valor de las igualdades evaluadas en x, y ser por tanto un vector mdimensional
Es un chero .m que dene las restricciones y en este caso se utiliza el cdigo
x=fmincon(....,@nonlcon,...)
Por ejemplo
function [rd,ri]=restricc( x)
% Denimos las restricciones de desigualdad
% x
2
+ yx 1
% x
3
+ y 2
rd = [ x(1)^2 + x(1)*x(2) - 1, x(1)^3+x(2) -2]
% Notar el paso del trmino independiente al primer miembro
% En caso de no existir restricciones de este tipo
% hay que utilizar una matriz vaca []
% rd = []
% Denimos las restricciones de igualdad
% x
2
+ y
2
= 9
%
ri = x(1)^2 + x(2)^2-9;
% De nuevo en caso de no existir restricciones de este tipo
% hay que utilizar una matriz vaca []
% ri = []
Si el gradiente de las restricciones puede calcularse, y la opcin GradConstr se activa mediante la
instruccin
opciones = optimset(GradConstr,on)
entonces la funcin restricc, debe suministrar, en el tercer y cuarto argumentos de salida, el valor
de los gradientes grd y gri, en el vector x. Hay que observar que una comprobacin del nmero de
argumentos que devuelve la funcin, valor que se obtiene en la variable nargout, podemos evitar el
clculo de estos gradientes cuando la funcin restricc se utiliza con dos argumentos de salida (cuando
el algoritmo solamente necesite el valor de las restricciones, pero no de sus gradientes). Hay que
tener en cuenta que tanto Grd como Gri son matrices cuyas componentes se denen como
Grd(i,j) es la derivada respecto a x
i
de la funcin g
j
(x)
Gri(i,j) es la derivada respecto a x
i
de la funcin h
j
(x)
Por ejemplo
c Silvestre Paredes Hernndez
20 Captulo 2. Referencia de funciones
function [rd,ri,Grd,Gri]=restricc( x)
% Denimos las restricciones de desigualdad
% x
2
+ yx 1
% x
3
+ y 2
rd = [ x(1)^2 + x(1)*x(2) - 1, x(1)^3+x(2) -2]
% Denimos las restricciones de igualdad
% x
2
+ y
2
= 9
%
ri = x(1)^2 + x(2)^2-9;
% Denimos los gradientes
% solamente cuando sea necesario:
if nargout>2
Grd = [2*x(1) + x(2), 3*x(1)^2
x(1), 1];
Gri = [2*x(1)
2*x(2)];
end
% Notar que en cada columna se encuentra el
% gradiente de la restriccin correspondiente
opciones Es una estructura que contiene los parmetros del proceso de optimizacin. Las opciones
que se utilizarn para fmincon son: DerivativeCheck, Diagnostics, DiMaxChange, DiMinChange,
Display, GradObj, GradConstr, LargeScale, MaxFunEvals, MaxIter, TolCon, TolFun, TolX.
P1,P2,... son argumentos que pueden pasarse a la funcin.
Argumentos de Salida:
sol es la solucin del problema obtenida a partir del punto inicial x0. Es un mnimo local de f (x),
siempre que haya convergencia.
fsol es el valor de f (x) en sol.
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
lambda Es una estructura que contiene los valores de los multiplicadores de Lagrange y Karush-Kuhn-
Tucker de cada restriccin. Los campos de esta estructura son:
1. lower Asociados al vector lb.
2. upper Asociados al vector ub.
3. ineqlin Asociadaos a las restricciones lineales de desigualdad.
4. eqlin Asociados a las restricciones lineales de igualdad.
5. ineqnonlin Asociados a las restricciones no lineales de desigualdad.
6. eqnonlin Asociados a las restricciones no lineales de igualdad.
grad Variable que contiene el valor del gradiente de f (x) en sol.
hess Variable que contiene el valor del hessiano de f (x) en sol.
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 21
2.2.3 fminsearch
Objetivo: Encontrar el mnimo de una funcin de varias variables a partir de una aproximacin inicial,
es decir, busca soluciones al problema.
Minimizar f (x)
x R
n
Sintxis:
Forma simple: sol = fminsearch(fun,x0)
Forma Completa: [sol,fsol,exitag,output] = fminsearch(fun,x0,opciones,P1,P2,...)
Argumentos:
Argumentos de Entrada:
fun funcin objetivo del problema, es una funcin que acepta un vector x y devuelve otro valor f, que
es el valor de la funcin en x. Puede ser un chero .m que dena la funcin, en este caso se utiliza
el cdigo
x=fminsearch(@fun,....)
o puede ser un objeto inline.
Vemos a continuacin un ejemplo de chero .m
function f=fun( x)
% Denimos la funcin x
2
+ y
2
fun = x(1)^2 + x(2)^2;
y la misma funcin denida mediante un objeto inline
fun = inline( x(1)^2 + x(2)^2)
Para un objeto inline solamente es necesario el nombre de ese objeto
x=fminsearch(fun,....)
x0 es la aproximacin inicial o punto de partida del algoritmo.
opciones Estructura que contiene los parmetros del proceso de optimizacin. Las opciones aceptadas
por fminbnd son: Display, MaxFunEvals, MaxIter, TolFun y TolX.
P1,P2,... son argumentos que pueden pasarse a la funcin.
Argumentos de Salida:
sol es la solucin del problema obtenida a partir del punto inicial x0. Es un mnimo local de f (x),
siempre que haya convergencia.
fsol es el valor de f (x) en sol.
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
Observaciones: El algoritmo utilizado por fminsearch est basado en el mtodo SIMPLEX o S
2
, en la
versin de Nelder-Mead, que utiliza simplex no regulares en cada iteracin (con expansiones y contrac-
ciones). La funcin objetivo debe ser continua. fminbnd solamente encuentra mnimos locales. Es menos
efectiva que fminunc para problemas de orden mayor que dos, pero funciona mejor para funciones con
discontinuidades.
c Silvestre Paredes Hernndez
22 Captulo 2. Referencia de funciones
2.2.4 fminunc
Objetivo: Encontrar el mnimo de una funcin de varias variables a partir de una aproximacin inicial,
es decir, busca soluciones al problema.
Minimizar f (x)
x R
n
Sintxis:
Forma simple: sol = fminunc(fun,x0)
Forma Completa: [sol,fsol,exitag,output,grad,hessian] = fminunc(fun,x0,opciones,P1,P2,...)
Argumentos:
Argumentos de Entrada:
fun funcin objetivo del problema, es una funcin que acepta un vector x y devuelve otro valor f, que
es el valor de la funcin en x. Puede ser un chero .m que dena la funcin, en este caso se utiliza
el cdigo
x=fminunc(@fun,....)
o puede ser un objeto inline.
Vemos a continuacin un ejemplo de chero .m
function f=fun( x)
% Denimos la funcin x
2
+ y
2
fun = x(1)^2 + x(2)^2;
y la misma funcin denida mediante un objeto inline
fun = inline( x(1)^2 + x(2)^2)
Para un objeto inline solamente es necesario el nombre de ese objeto
x=fminunc(fun,....)
Si el gradiente de fun puede calcularse, y la opcin GradObj se activa mediante la instruccin
opciones = optimset(GradObj,on)
entonces la funcin fun, debe suministrar, en el segundo argumento de salida, el valor del gradiente
gf, en el vector x. Hay que observar que una comprobacin del nmero de argumentos que devuelve
la funcin, valor que se obtiene en la variable nargout, podemos evitar el clculo de este gradiente
cuando la funcin fun se utiliza con un slo argumento de salida (cuando el algoritmo solamente
necesite el valor de f, pero no el de gf. Por ejemplo
function [f,gf ]=nombre( x)
% Denimos la funcin x
2
+ y
2
f = x(1)^2 +x(2)^2+1;
% Denimos el gradiente [2x, 2y],
% solamente cuando sea necesario:
if nargout>1
gf = [2*x(1), 2*x(2)];
end
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 23
x0 es la aproximacin inicial o punto de partida del algoritmo.
opciones Estructura que contiene los parmetros del proceso de optimizacin. Las opciones aceptadas
por fminunc son: DerivativeCheck, Diagnostics, DiMaxChange, DiMinChange, LineSearchType,
Display, GradObj, HessUpdate, LargeScale, MaxFunEvals, MaxIter, TolFun y TolX.
P1,P2,... son argumentos que pueden pasarse a la funcin.
Argumentos de Salida:
sol es la solucin del problema obtenida a partir del punto inicial x0. Es un mnimo local de f (x),
siempre que haya convergencia.
fsol es el valor de f (x) en sol.
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
grad gradiente de la funcin objetivo f (x) en el punto solucin sol.
hessian matriz hessiana de la funcin objetivo f (x) en el punto solucin sol.
Observaciones: La funcin objetivo debe ser continua. fminunc solamente encuentra mnimos locales.
Utilizar fminsearch para funciones con discontinuidades.
2.2.5 linprog
Objetivo: Encontrar el mnimo de un problema lineal. Busca soluciones al problema.
Minimizar c
T
x
Sujeto a
Ax b
A
e
x = b
e
lb x ub
donde c, x, b, b
e
, lb y ub son vectores, A y A
e
son matrices.
Sintxis:
Forma simple: sol = linprog(c,A,b,A
e
,b
e
)
Forma Completa: [sol,fsol,exitag,output,lambda] = linprog(cA,b,A
e
,b
e
,lb,ub,x0,opciones)
Argumentos:
Argumentos de Entrada:
c vector de coecientes de la funcin objetivo del problema.
A,b Matriz de coecientes y vector de trminos independientes asociados a las restricciones lineales de
.
A
e
,b
e
Matriz de coecientes y vector de trminos independientes asociados a las restricciones lineales de
=.
lb,ub vector de cotas inferiores y superiores asociadas a las variables del problema de forma que
lb(i) x(i) ub(i)
estos valores pueden ser inf y +inf, cuando la componente correspondiente no est acotada inferior
o superiormente respectivamente.
c Silvestre Paredes Hernndez
24 Captulo 2. Referencia de funciones
x0 es la aproximacin inicial de la solucin o punto de partida del algoritmo.
opciones Es una estructura que contiene los parmetros del proceso de optimizacin. Las opciones que
se utilizarn para linprog son: Diagnostics, Display, LargeScale, MaxIter.
Argumentos de Salida:
sol es una solucin del problema, es decir, es un mnimo global de c
T
x (siempre que el problema tenga
solucin, es decir sea factible y acotado)
fsol es el valor ptimo del problema lineal
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
lambda Es una estructura que contiene los valores de los multiplicadores de Lagrange y Karush-Kuhn-
Tucker de cada restriccin. Los campos de esta estructura son:
1. lower Asociados al vector lb.
2. upper Asociados al vector ub.
3. ineqlin Asociadaos a las restricciones lineales de desigualdad.
4. eqlin Asociados a las restricciones lineales de igualdad.
2.2.6 lsqnonlin
Objetivo: Encontrar el mnimo de una funcin de varias variables sin restricciones del tipo suma de
cuadrados, es decir, lsqnonlin se utiliza para resolver problemas del tipo
Minimizar F (x) = f
2
1
(x) + f
2
2
(x) + + f
2
m
(x)
Sujeto a
lb x ub
donde x, lb y ub son vectores, f
j
(x) son funciones reales multivariantes.
Sintxis:
Forma simple: sol = lsqnonlin(fun,x0)
Forma Completa: [sol,resnorm,residuos,exitag,output,lambda,jacobiano] = ...
lsqnonlin(fun,x0,lb,ub,opciones,P1,P2,...)
Argumentos:
Argumentos de Entrada:
fun En lugar de calcular el valor de F (x) en el vector x (la suma de los cuadrados), la funcin lsqnonlin
utiliza como funcin denida por el usuario un chero que devuelva el vector formado por las funciones
f
j
(x) que denen a F (x), es decir, la funcin fun debe suministrar un vector de la forma
[f
1
(x) , f
2
(x) , . . . , f
n
(x)]
La funcin fun puede denirse mediante un chero y usada posteriormente mediante la sintxis
x = lsqnonlin(@fun,....)
por ejemplo si
F (x) = x
2
+ y
2
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 25
la funcin fun puede denirse como
function f=fun( x)
% Denimos la funcin x
2
+ y
2
f = [x(1), x(2)];
y la misma funcin denida mediante un objeto inline
fun = inline(x)
en este caso solamente es necesario el nombre del objeto
x=fmincon(fun,....)
Si podemos calcular el Jacobiano de fun, y la opcin Jacobian se activa mediante la instruccin
opciones = optimset(Jacobian,on)
entonces la funcin fun, debe suministrar, en el segundo argumento de salida, el valor de este jacobiano
Jf, en el vector x. Hay que observar que una comprobacin del nmero de argumentos que devuelve
la funcin, valor que se obtiene en la variable nargout, podemos evitar el clculo de este jacobiano
cuando la funcin fun se utiliza con un slo argumento de salida (cuando el algoritmo solamente
necesite el valor de f, pero no el de Jf. Si fun devuelve un vector de m componentes y x es de
dimensin n, entonces el Jacobiano Jf, es una matriz m n, donde Jf(i,j) es la derivada parcial de
f
i
(x) respecto a x
j
. Por ejemplo
function [f,Jf ]=fun( x)
% Denimos la funcin x
2
+ y
2
f = [x(1), x(2)];
% Denimos el Jacobiando [1, 0; 0, 1],
% solamente cuando sea necesario:
if nargout>1
Jf = [1, 0; 0,1];
end
x0 es la aproximacin inicial de la solucin o punto de partida del algoritmo.
lb,ub vector de cotas inferiores y superiores asociadas a las variables del problema de forma que
lb(i) x(i) ub(i)
estos valores pueden ser inf y +inf, cuando la componente correspondiente no est acotada inferior
o superiormente respectivamente. Estos vectores solamente pueden utilizarse con la opcin LargeScale
activada.
opciones Es una estructura que contiene los parmetros del proceso de optimizacin. Las opciones que
se utilizarn para fmincon son: DerivativeCheck, Diagnostics, DiMaxChange, DiMinChange, Dis-
play, Jacobian, LargeScale, LevenbergMarquardt, LineSearchType, MaxFunEvals, MaxIter, TolFun,
TolX.
P1,P2,... son argumentos que pueden pasarse a la funcin.
Argumentos de Salida:
sol es la solucin del problema obtenida a partir del punto inicial x0. Es un mnimo local de F (x),
siempre que haya convergencia.
c Silvestre Paredes Hernndez
26 Captulo 2. Referencia de funciones
resnorm es el valor de la funcin F (x) =
P
m
i=1
f
i
(x)
2
en el punto sol.
residuos es un vector con los valores de f
j
(x) para cada j.
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
lambda Es una estructura que contiene los valores de los multiplicadores de Lagrange y Karush-Kuhn-
Tucker de cada restriccin. Los campos de esta estructura son:
1. lower Asociados al vector lb.
2. upper Asociados al vector ub.
jacobiano Variable que contiene el valor del Jacobiano de F (x) en sol.
Observaciones: La funcin objetivo debe ser continua. lsqnonlin solamente encuentra mnimos locales.
Utilizar fminsearch para funciones con discontinuidades.
2.2.7 optimget
Objetivo:Funcin utilizada para extraer los valores de los parmetros en una estructura de opciones de
optimizacin.
Sintxis:
Forma simple: val = optimget(opciones,param)
Forma Completa: val = optimget(opciones,param, default)
Argumentos:
Argumentos de Entrada:
opciones: La estructura con las opciones utilizadas en el proceso de optimizacin.
param: Es el parmetro cuyo valor queremos conocer.
default: En caso de que el parmetro param no tenga asignado un valor dentro de la estructura opciones,
la funcin optimget devolver su valor predeterminado.
Argumentos de Salida:
val: Valor del parmetro param dentro de la estructura opciones.
Ejemplos: Con la siguiente instrucciones optimget devuelve el valor de la opcin de minimizacin Display
dentro de la estructura de optimizacin mis_opciones
val = optimget(mis_opciones, Display)
Mientras que con esta otra instruccin, la funcin optimget devuelve el valor de la opcin Display dentro
de la estructura de optimizacin mis_opciones, (como en el ejemplo anterior), pero si el parmetro Display,
no est denido, devuelve el valor nal.
val = optimget(mis_opciones, Display,nal)
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 27
2.2.8 optimset
Objetivo:Funcin utilizada para crear o modicar los valores de los parmetros en una estructura de
opciones de optimizacin.
Sintxis y argumentos:
opciones = optimset(param1,valor1,param2,valor2,...)
Crea la estructura de optimizacin opciones, en la que los parmetros especicados (parma1, par-
ma2,...) toman los valores indicados (valor1, valor2,...). Cualquier parmetro no especicado se
igualar a [], este valor indica que la funcin de optimizacin empleada, usar el valor predetermi-
nado para ese parmetro. No es necesario escribir el nombre completo del parmetro, es suciente
con especicar solamente, el nmero de caracteres necesarios para distinguir al parmetro de forma
unvoca. Adems no existe diferencia entre maysculas y minsculas.
optimset
Muestra la lista completa de parmetros de optimizacin y sus valores vlidos.
opciones = optimset
Crea la estructura de optimizacin opciones, en la que todos los parmetros toman el valor [].
opciones = optimset(optimfun)
Crea la estructura de optimizacin opciones, con todos los parmetros y valores predeterminados
relevantes para la funcin de optimizacin optimfun.
opciones = optimset(opciones_antiguas,param_1,valor_2, param_2,valor_2...)
Crea una copia de la estructura opciones_antiguas y modica los parmetros param_k con los
valores indicados en valor_k
opciones = optimset(opciones_antiguas,opciones_nuevas)
Combina una estructua de opciones existente, opciones_antiguas, con una estructura nueva opcio-
nes_nuevas. Cualquier parmetro en opciones_nuevas con valor no vaco sobrescribe el correspon-
diente parmetro en opciones_antiguas.
2.2.9 quadprog
Objetivo: Encontrar el mnimo de un problema cuadrtico. Busca soluciones al problema.
Minimizar
1
2
x
T
Hx +c
T
x
Sujeto a
Ax b
A
e
x = b
e
lb x ub
donde c, x, b, b
e
, lb y ub son vectores, A y A
e
son matrices y H es una matriz cuadrada.
Sintxis:
Forma simple: sol = quadprog(H,c,A,b)
Forma Completa: [sol,fsol,exitag,output,lambda] = quadprog(cA,b,A
e
,b
e
,lb,ub,x0,opciones,P1,P2,..)
Argumentos:
Argumentos de Entrada:
H matriz cuadrada y simtrica, coincide con el hessiano de la funcin.
c vector de coecientes de la funcin objetivo del problema.
A,b Matriz de coecientes y vector de trminos independientes asociados a las restricciones lineales de
.
c Silvestre Paredes Hernndez
28 Captulo 2. Referencia de funciones
A
e
,b
e
Matriz de coecientes y vector de trminos independientes asociados a las restricciones lineales de
=.
lb,ub vector de cotas inferiores y superiores asociadas a las variables del problema de forma que
lb(i) x(i) ub(i)
estos valores pueden ser inf y +inf, cuando la componente correspondiente no est acotada inferior
o superiormente respectivamente.
x0 es la aproximacin inicial de la solucin o punto de partida del algoritmo.
opciones Es una estructura que contiene los parmetros del proceso de optimizacin. Las opciones que
se utilizarn para linprog son: Diagnostics, Display, LargeScale, MaxIter.
P1,P2,... son argumentos que pueden pasarse a la funcin.
Argumentos de Salida:
sol es la solucin del problema, es decir, es el mnimo de
1
2
x
T
Hx+ c
T
x (siempre que haya convergencia)
fsol es el valor ptimo del problema lineal
exitag es un cdigo de salida de la funcin que puede tomar los siguientes valores:
1. 1 el algoritmo converge.
2. 0 Se han superado el nmero de evaluaciones de f (x) permitidas.
3. 1 el algoritmo diverge
output estructura que contiene informacin respecto al proceso de optimizacin.
lambda Es una estructura que contiene los valores de los multiplicadores de Lagrange y Karush-Kuhn-
Tucker de cada restriccin. Los campos de esta estructura son:
1. lower Asociados al vector lb.
2. upper Asociados al vector ub.
3. ineqlin Asociados a las restricciones lineales de desigualdad.
4. eqlin Asociados a las restricciones lineales de igualdad.
Ejemplo:
Encuentra los valores de x que resuelven el siguiente problema
Minimizar
1
2
x
2
1
+ x
2
2
x
1
x
2
2x
1
6x
2
Sujeto a
x
1
+ x
2
2
x
1
+ 2x
2
2
2x
1
+ x
2
3
x
1
0
x
2
0
en notacin matricial tendremos
Minimizar
1
2
(x
1
, x
2
)

1 1
1 2

x
1
x
2

+ [2, 6]

x
1
x
2

Sujeto a
x
1
+ x
2
2
x
1
+ 2x
2
2
2x
1
+ x
2
3
x
1
0
x
2
0
c Silvestre Paredes Hernndez
2.2. Descripcin de las funciones utilizadas 29
Denimos los vectores correspondientes:
H = [1-1;-12]
c = [-2;-6]
A = [1 1; -1 2; 2 1]
b = [2; 2; 3]
lb = zeros(2,1)
a continuacin utilizamos la funcin quadprog, mediante la istruccin
[x,fval,exitag,output,lambda]=quadprog(H,f,A,b,[],[],lb)
que conduce a la solucin
x = [0.6667, 1.3333]
fval = -8.2222
exitag = 1
output: iterations:3;
algorithms: medium-scale: active-set
rstorderopt : []
cgiterations : []
lambda.ineqlin = [3.1111, 0.4444, 0]
lambda.lower = [0,0]
c Silvestre Paredes Hernndez

Você também pode gostar