5

我有一个函数来优化,比如函数,在 Matlab 中。这个函数取决于我想要优化的变量(比如 x)和一个不需要优化的参数(比如 Q)。因此,函数 Function(x,Q)。换句话说,我有一个 Q 值数组,并且想为每个 Q 找到最佳 x 值。但是,在优化函数中使用函数句柄 @Function 时,我找不到如何传递这些 Q 值的方法。

所以,我的问题是如何在优化函数中使用函数句柄时传递这些 Q 值,例如 fmincon(@Function,x0,A,b)?

4

2 回答 2

4

尝试使用匿名函数:

x = cell( 1, numel(Q) );
for qi = 1:numel( Q )
   x{qi} = fmincon( @(x) Function(x, Q(qi)), A, b );
end 
于 2013-02-18T18:38:00.317 回答
4

如 MATLAB 文档中所述,这个问题实际上有 3 个解决方案:

  1. Shai对这篇文章的回答中
    描述的匿名函数。
  2. 嵌套函数
    在这种方法中,外部函数接受所有参数,而内部函数只接受对其进行优化的参数。
    这是取自 MATLAB 文档的示例: 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中使用它们并将它们声明为全局变量
    这是 MATLAB 文档中的一个示例:
    • 定义目标函数: 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
    • 优化: global a b c; a = 4; b = 2.1; c = 4; % Assign parameter values x0 = [0.5,0.5]; [x,fval] = fminunc(@globalfun,x0)
于 2014-03-10T23:17:50.750 回答