Passing additional arguments through function handle in Matlab

霸气de小男生 提交于 2019-12-30 09:29:17

问题


I have a function to optimize, say Function, in Matlab. This function depends on variables (say x) over which I want to optimize and one parameter (say, Q) which does not need to be optimized.Hence, the function Function(x,Q). In other words, I have an array of values for Q and want to find optimal x values for each Q. However, I cannot find a way how to pass those Q values when using function handle @Function in optimization function.

So, my question is how to pass those Q values when using function handle in optimization functions, for example fmincon(@Function,x0,A,b)?


回答1:


Try using anonymous function:

x = cell( 1, numel(Q) );
for qi = 1:numel( Q )
   x{qi} = fmincon( @(x) Function(x, Q(qi)), A, b );
end 



回答2:


As described in MATLAB documentation, there are actually 3 solutions for this problem:

  1. Anonymous Functions
    which is described in the Shai's answer of this post.
  2. Nested Functions:
    in this approach the outer function accepts all arguments, and the inner function only accepts parameters that optimization takes place on them.
    this is an example taken from MATLAB documentation: function [x,fval] = runnested(a,b,c,x0) [x,fval] = fminunc(@nestedfun,x0); % Nested function that computes the objective function function y = nestedfun(x) y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)x(2) +... (-c + cx(2)^2)*x(2)^2; end end
  3. Global Variables
    in this approach you should define the parameters that are needed in objective function as global in workspace, and use them in objective function with declaring them as global.
    here is an example again from MATLAB documentation:
    • Defining objective function: function y = globalfun(x) global a b c y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)x(2) + ... (-c + cx(2)^2)*x(2)^2; end
    • Optimization: global a b c; a = 4; b = 2.1; c = 4; % Assign parameter values x0 = [0.5,0.5]; [x,fval] = fminunc(@globalfun,x0)


来源:https://stackoverflow.com/questions/14943044/passing-additional-arguments-through-function-handle-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!