Separate fmincon and gradient
10 views (last 30 days)
Show older comments
Rustem Devletov
on 27 Apr 2019
Commented: Rustem Devletov
on 27 Apr 2019
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 Comments
Accepted Answer
Matt J
on 27 Apr 2019
Edited: Matt J
on 27 Apr 2019
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 Comments
More Answers (0)
See Also
Categories
Find more on Linear Least Squares in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!