Matlab - Llamada a fminsearch desde función

   
Vista:

Llamada a fminsearch desde función

Publicado por Natalia (1 intervención) el 09/01/2011 01:25:52
Hola, soy principiante en esto y tengo un problema con Simulink que no sé cómo resolver, a ver si algún alma caritativa me puede ayudar... :-D

Estoy intentando desarrollar una simulación de un sistema de energía solar y me encuentro con un problema a la hora de optimizar los valores de salida. Si hago una llamada a la función fminsearch desde línea de comandos, todo funciona correctamente. El problema viene cuando intento hago la llamada a fminsearch desde una función y llamo a ésta última desde la ventana de comandos. El resultado es que, o bien se mete en un bucle infinito, o bien me suelta el error siguiente:

??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

Error in ==> solar_cell_lse at 8
Pars = reshape([ParsList; cellstr(num2str(params'))'],1,[]);

Error in ==> fminsearch at 205
fv(:,1) = funfcn(x,varargin{:});

Error in ==> solar_cell_optimization at 51
OptParsMain = fminsearch(@solar_cell_lse, InitGuessMain,

que, si no me equivoco, indica un error en los parámetros de entrada.

Entiendo que embebiéndola dentro de una función se crea una llamada recursiva generando el bucle infinito; pero no sé cómo resolver el problema ya que mi simulación se encuentra dentro de un bucle y necesito que se optimicen los valores para cada vuelta del bucle.

¿Hay alguna solución para esto u otra manera de optimizar mi simulación, sin tanta complicación?

Muchas Gracias ...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Llamada a fminsearch desde función

Publicado por Jorge (226 intervenciones) el 09/01/2011 02:43:41
Primero debes verificar que la simulación funcione correctamente, cambiando sus parámetros.

Después, debes crear una función objetivo (FO).
Esta FO debe llamar la simulación y debe evaluarla de alguna manera. La FO debe devolver algún escalar. Éste es el número que se va a minimiza y la definición de la FO es crítica.

En tercer lugar, la función fminsearch llamará la FO, cambiará automáticamente los parámetros de la función, y leerá el escalar que devuelve la FO de tal manera que minimizará el resultado.

Es irrelevante si llamas fminsearch desde la línea de comandos o desde otra función.
Lo lógico es que la llames desde un código que establezca los parámetros de arranque (condiciones iniciales) y que te sirva como función principal.

Nota que fminsearch devuelve mínimos locales, no globales. La solución arrojada no es necesariamente la mejor.

Ya que eso funcione una vez, puedes incluir una iteración para resolver el problema muchas veces. Pero si no te funciona una vez, no intentes la iteración, porque no te resolverá nada. Tienes que ir por pasos y tener cada paso bien controlado.

La función fminsearch se puede emplear para optimización, minimización, ajuste de curvas, solución de sistemas no lineales, etc. Es una función casi mágica...
Todo depende de cómo definas la función objetivo: eso es lo que cambia todo.

La URL de arriba te lleva a un índice de problemas resueltos con fminsearch.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar