我在Matlab中有一个优化函数,比如Function。这个函数依赖于我想要优化的变量(比如x)和一个不需要优化的参数(比如Q)。因此,函数Function(x,Q)。换句话说,我有一个Q值的数组,并希望为每个Q找到最佳的x值。但是,在优化函数中使用函数句柄@Function时,我找不到如何传递这些Q值的方法。
所以,我的问题是在优化函数中使用函数句柄时如何传递这些Q值,例如fmincon(@ Function,x0,A,b)?
答案 0 :(得分:4)
尝试使用匿名函数:
x = cell( 1, numel(Q) );
for qi = 1:numel( Q )
x{qi} = fmincon( @(x) Function(x, Q(qi)), A, b );
end
答案 1 :(得分:4)
如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)