fminunc

4
na llamada básico de fminunc superior Sin ningún tipo de opciones adicionales de la sintaxis es [X, FVal] = fminunc ('objfun', x0) donde objfun : nombre de un archivo de función en la que la función objetivo se codifica x0: (columna) portadoras de los valores iniciales x (primera salida): vector solución óptima (columna) FVal (segunda salida): valor de la función óptima Notas : 1) En lugar de objfun . puede utilizar cualquier otro nombre 2) Si usted no está interesado en FVal , sólo tienes que escribir x = fminunc ('objfun', x0 ). 3) Varias opciones se pueden ajustar, en particular el "gradiente opción "que utiliza información sobre el gradiente de la función objetivo; ver B y descripción de la ayuda de Matlab . 4) fminunc busca un mínimo (como lo hace linprog ). Si se busca un máximo, el código-f en el archivo de función! Ejemplo: top Minimizar la función objetivo f (x, y, z) = (x 2 + y 2 ) 2 -x 2 -y + z 2

Transcript of fminunc

na llamada bsico de fminuncsuperiorSin ningn tipo de opciones adicionales de la sintaxis es[X, FVal] = fminunc ('objfun', x0)dondeobjfun: nombre de unarchivo de funcinen la que la funcin objetivo se codificax0:(columna) portadoras de los valores inicialesx (primera salida): vector solucin ptima (columna)FVal(segunda salida): valor de la funcin ptima

Notas:1) En lugar deobjfun. puede utilizar cualquier otro nombre2) Si usted no est interesado enFVal, slo tienes que escribirx = fminunc ('objfun', x0).3) Varias opciones se pueden ajustar, en particular el "gradiente opcin "que utiliza informacin sobre el gradiente de la funcin objetivo; verBydescripcin de la ayuda de Matlab.4)fminuncbusca un mnimo(como lo hacelinprog).Si se busca un mximo, el cdigo-f en el archivo de funcin!Ejemplo:topMinimizar la funcin objetivof (x, y, z) = (x2+ y2)2-x2-y + z2(1) En primer lugar, tiene que codificar la funcin objetivo.Abra un nuevo archivo-m en el editor y escribe:funcin f = objfun (x)f = (x (1) ^ 2 + x (2) ^ 2) ^ 2-x (1) ^ 2-x (2) + x (3) ^ 2;Guarde el archivo con (cualquiera) nombre - Aqu elegimosobjfun.m.Si el archivo se guarda con este nombre, entonces usted tiene acceso a ella y puede recuperar el valor de la funcin para cualquier vector de entradax.Por ejemplo, si usted quiere saber el valor en (1,1,1), tipo (ventana de comandos o un archivo de secuencia de comandos)objfun ([1, 1, 1])y ejecutar.La respuesta en la ventana de comandos es3.(2) Ahora podemos aplicarfminunccon un valor de partida la eleccin apropiada de encontrar un mnimo.Elegimos x0 = [1, 1, 1] y ejecutamos los siguientes comandos en la ventana de comandos:>> X0 = [1, 1, 1], [x, FVal] = fminunc ('objfun', x0)Advertencia: Gradiente debe ser proporcionada para el mtodo de la confianza-regin; utilizando el mtodo de lnea de bsqueda en lugar.> En C: \ MATLABR12 \ toolbox \ optim \ fminunc.m en la lnea 211Optimizacin terminado con xito:actual direccin de bsqueda es una direccin de descenso, y la magnitud de laderivada direccional en busca sentido a menos de 2 * options.TolFunx = 0.49998491345499 0.50000453310525 -0,00000383408095FVal = -0,49999999985338El comentario ms abajo de la lnea de comando le dice que no se proporcion informacin sobre el gradiente que puede conducir a un rendimiento no ptimo.B de Call of fminunc con la informacin suministrada gradientesuperiorProgramas de optimizacin generalmente funciona mejor si la informacin pendiente se explota.Esto requiere dos modificaciones:(1) El archivo de objetivo debe ser codificado de tal manera que el gradiente se puede retireved como segunda salida.Para la funcin anterior para ello es necesario la siguiente extensin del archivo de funcin:funcin [f, gradf] = objfun (x)f=(x(1)^2+x(2)^2)^2-x(1)^2-x(2)+x(3)^2;gradf=[4*x(1)*(x(1)^2+x(2)^2)-2*x(1);4*x(2)*(x(1)^2+x(2)^2)-1;2*x(3)];El segundo argumento de salida,gradf,es el vector gradiente de f escrita como vector columna.(2) El programa tiene que ser `dijo 'que deber explotar la informacin pendiente.Esto se hace mediante la especificacin de una de las opciones de optimizacin, y el programa tiene que ser informado de que tiene que utilizar esta opcin.La sintaxis general es>> Options = optimset ('GradObj', 'on');>> [x, FVal] = fminunc ('objfun', x0, opciones)Por ejemplo, ahora con la informacin suministrada gradiente, que ejecutamos en la ventana de comandos:>> Options = optimset ('GradObj', 'on');>> x0 = [1, 1, 1], [x, FVal] = fminunc ('objfun', x0, opciones)Optimizacin terminado con xito:valor de la funcin relativa cambiar en menos de OPTIONS.TolFunx = 0.50045437772043 0.49981153795642 0.00003452966310FVal = -0,49999989244986Como puede ver, los valores difieren ligeramente de los obtenidos anteriormente, y de hecho son ms precisos.