5

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)?

2
  • 1
    Does fmincon(@Function,x0,Q,A,b) work? Commented Feb 18, 2013 at 18:38
  • @DennisJaheruddin No, It does not work. Unfortunately. Commented Feb 18, 2013 at 18:51

3 Answers 3

4

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 
Sign up to request clarification or add additional context in comments.

Comments

4

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)

Comments

0

You may be able to do the following:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,Q)

which will pass Q along to fun(x,Q)!

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.