Passing variable from anonymous objective function to main workspace

7 vues (au cours des 30 derniers jours)
Mario Malic
Mario Malic le 28 Juil 2020
Commenté : Mario Malic le 2 Nov 2020
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 commentaire
Mario Malic
Mario Malic le 2 Nov 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.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 29 Juil 2020
Modifié(e) : Stephen23 le 29 Juil 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();

Plus de réponses (1)

Geoff Hayes
Geoff Hayes le 28 Juil 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;

Catégories

En savoir plus sur Problem-Based Optimization Setup dans Help Center et File Exchange

Produits


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by