我只想使用仅使用梯度向量的MATLAB函数fmincon
(不带标量函数)。但是我有麻烦。例如,我尝试了以下操作,但不起作用。有什么帮助吗?谢谢!
fun = @rosenbrockwithgrad;
x0 = [-1,2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [-2,-2];
ub = [2,2];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
function [grad] = rosenbrockwithgrad(x)
grad = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
200*(x(2)-x(1)^2)];
end
答案 0 :(得分:0)
您需要同时包含函数及其渐变。见下文:
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
fun = @rosenbrockwithgrad;
x0 = [-1,2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [-2,-2];
ub = [2,2];
nonlcon = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
function [f,g] = rosenbrockwithgrad(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;
if nargout > 1 % gradient required
g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
200*(x(2)-x(1)^2)];
end
end
此代码应正常运行。