MATLAB fmincon с вектором градиента

#matlab

#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. Функция fun должна использоваться для передачи целевой (стоимостной) функции в fmincon. Вы можете передать градиент аналитически в качестве другого аргумента.

Ответ №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
  

Этот код должен выполняться правильно.

Комментарии:

1. Спасибо, но разве это невозможно без скалярной функции? Мой вопрос заключался в том, чтобы получить решение только с использованием градиентного вектора (без f)

2. К сожалению, я не верю, что это возможно.