我有一个函数来优化,比如函数,在 Matlab 中。这个函数取决于我想要优化的变量(比如 x)和一个不需要优化的参数(比如 Q)。因此,函数 Function(x,Q)。换句话说,我有一个 Q 值数组,并且想为每个 Q 找到最佳 x 值。但是,在优化函数中使用函数句柄 @Function 时,我找不到如何传递这些 Q 值的方法。
所以,我的问题是如何在优化函数中使用函数句柄时传递这些 Q 值,例如 fmincon(@Function,x0,A,b)?
我有一个函数来优化,比如函数,在 Matlab 中。这个函数取决于我想要优化的变量(比如 x)和一个不需要优化的参数(比如 Q)。因此,函数 Function(x,Q)。换句话说,我有一个 Q 值数组,并且想为每个 Q 找到最佳 x 值。但是,在优化函数中使用函数句柄 @Function 时,我找不到如何传递这些 Q 值的方法。
所以,我的问题是如何在优化函数中使用函数句柄时传递这些 Q 值,例如 fmincon(@Function,x0,A,b)?
尝试使用匿名函数:
x = cell( 1, numel(Q) );
for qi = 1:numel( Q )
x{qi} = fmincon( @(x) Function(x, Q(qi)), A, b );
end
如 MATLAB 文档中所述,这个问题实际上有 3 个解决方案:
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
global
中使用它们并将它们声明为全局变量。
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)