Separate fmincon and gradient
2 次查看(过去 30 天)
显示 更早的评论
I was assingned the following task. The goal is to supply gradient to objective function, but from another file. I don't understand how to implement this.
It should be smth like this:
file 1 - objective function
file 2 - gradient
file 3 constraints
file 4 fmincon
Let's take as an example the rosenbrock function
file 1
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
file 2
% here the gradient should go, but for now it's in the file 1. The problem is I have to supply it from this file into file 1
file 3
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [ ];
file 4
fun = @rosenbrockwithgrad;
x0 = [-1,2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [-2,-2];
ub = [2,2];
nonlcon = @unitdisk;
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
I'm feeling really really despondent. My deadline is upcoming soon and all my thesis paper will be based on fmincon. If I don't implement the code, I won't be able to proceed further.
0 个评论
采纳的回答
Matt J
2019-4-27
编辑:Matt J
2019-4-27
The goal is to supply gradient to objective function, but from another file.
I find this requirement difficult to interpret, but here is my best guess:
file 1
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=rosengrad(x);
end
file 2
function g=rosengrad(x)
g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
200*(x(2)-x(1)^2)];
end
3 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Systems of Nonlinear Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!