具有梯度向量的MATLAB fmincon

时间:2020-09-26 23:51:48

标签: matlab

我只想使用仅使用梯度向量的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

1 个答案:

答案 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

此代码应正常运行。

相关问题