Sin ningn tipo de opciones adicionales de la sintaxis es
[X, FVal] = fminunc ('objfun', x0) donde objfun : nombre de un archivo de funcin en la que la funcin objetivo se codifica x0: (columna) portadoras de los valores iniciales x (primera salida): vector solucin ptima (columna) FVal (segunda salida): valor de la funcin ptima
Notas : 1) En lugar de objfun . puede utilizar cualquier otro nombre 2) Si usted no est interesado en FVal , slo tienes que escribir x = fminunc ('objfun', x0 ). 3) Varias opciones se pueden ajustar, en particular el "gradiente opcin "que utiliza informacin sobre el gradiente de la funcin objetivo; ver B y descripcin de la ayuda de Matlab . 4) fminunc busca un mnimo (como lo hace linprog ). Si se busca un mximo, el cdigo-f en el archivo de funcin! Ejemplo: top Minimizar la funcin objetivo f (x, y, z) = (x 2 + y 2 ) 2 -x 2 -y + z 2
(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 elegimos objfun.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 entrada x . 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 es 3 . (2) Ahora podemos aplicar fminunc con 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 211 Optimizacin terminado con xito: actual direccin de bsqueda es una direccin de descenso, y la magnitud de la derivada direccional en busca sentido a menos de 2 * options.TolFun x = 0.49998491345499 0.50000453310525 -0,00000383408095 FVal = -0,49999999985338 El 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 gradiente superior Programas 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.TolFun x = 0.50045437772043 0.49981153795642 0.00003452966310 FVal = -0,49999989244986 Como puede ver, los valores difieren ligeramente de los obtenidos anteriormente, y de hecho son ms precisos.