#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. К сожалению, я не верю, что это возможно.