Passing variable from anonymous objective function to main workspace

3 visualizaciones (últimos 30 días)
Hello guys, I have a quick and simple question for you about passing variables from anonymous objective functions.
[x, fval] = fmincon(@(x)objfun(x,var1, var2),x0)
And in this objfun I am calculating and saving some information in variable data (cell). After optimization is done, I would like to have that variable into my workspace. Currently I am declaring it as a global variable and of course since it's bad practice. Is there an alternative way to do it?
Saving into variable data for each iteration seems a little bit tedious.
  1 comentario
Mario Malic
Mario Malic el 2 de Nov. de 2020
+1 on both answers since they both solve the problem. It takes a bit of time for me to understand nested functions, especially the way they are written. I went for Stephen's answer, just because of simplicity.

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 29 de Jul. de 2020
Editada: Stephen23 el 29 de Jul. de 2020
You can do this easily with nargin:
function val = objfun(x,v1,v2)
persistent data
if ~nargin
val = data;
return
end
... your code
end
and then call it after the fmincon call:
data = objfun();

Más respuestas (1)

Geoff Hayes
Geoff Hayes el 28 de Jul. de 2020
Mario - consider nesting your optimization function within the main function and have it return the variable to the workspace. See Nested Functions for details. An example of this might be
function [data] = myMainFunction
data = [];
function myNestedFunction(x)
% do something
for k = 1:ceil(x)
data(k) = k;
end
end
% call the nested function
myNestedFunction(42);
end
The above code would be saved to a file named myMainFunction.m. It would be called from the command line as
>> x = myMainFunction;

Etiquetas

Productos


Versión

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by