【问题标题】:MATLAB fmincon with gradient vector带有梯度向量的 MATLAB fmincon
【发布时间】:2020-09-27 09:25:07
【问题描述】:

我想使用 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

【问题讨论】:

  • 必须使用函数fun 将目标(成本)函数传递给fmincon。您可以将梯度解析地作为另一个参数传递。

标签: matlab


【解决方案1】:

您需要同时包含函数及其渐变。见下文:

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

这段代码应该可以正常运行。

【讨论】:

  • 谢谢,但是,没有标量函数就不可能吗?我的问题是只使用梯度向量(没有 f)得到解决方案
  • 很遗憾,我不相信这是可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多