How can I include a function in a for loop for an optimization problem?
Show older comments
I have an optimization problem which should minimize b(i)*h(i)*100 for i=1:5 considering 5 inequality constraints. Since I need to write two functions; "function f = objfun(b,h)" and "function [c, ceq] = confun(x)" I am having hard time placing the for loop i=1:5 in the code which I aim to sum up all the b(i)*h(i)*100 values at the end. Below is the code I wrote, any kind of help is appreciated.
function f = objfun(b,h)
for i=1:5
vol=b(i)*h(i)*100;
f=sum(vol(1:i));
P=50000;
L=500;
le(i)=100;
dy(0)=0;
y(0)=0;
x0=[40,5];
y(i)=(P*((le(i))^2)/2*E*in(i))*[L-sum(le(1:i))+2*le(i)/3]+dy(i-1)+y(i-1);
dy(i)=(P*l(i)/E*in(i))*[L+l(i)/2-sum(le(1:i))]+dy(i-1);
in(i)=(b(i)*h(i)^3)/12;
M(i)=p*[L+le(i)-sum(le(1:i))];
sig(i)=M(i)*h(i)/2*in(i);
function [c, ceq] = confun(x)
c=[sig(i)-14000;
y(5)-2,5;
h(i)-20*(b(i));
1-b(i);
5-h(i)];
ceq=[];
options=optimoptions(@fmincon, 'Algorithm','sqp');
z(i)=fmincon(@objfun,x0,[],[],[],[],[],@confun,options);
z(0)=0;
z(i)=z(i)+z(i-1);
end
end
z(5)
[c]=confun(z(5))
Thanks!
Answers (1)
Alan Weiss
on 1 Dec 2016
If I understand you, you have five different problems that you are trying to solve. You need to solve them one at a time. The for loop does not belong inside your objective or constraint function.
Additionally, you need to pass b and h, your variables that I think you are optimizing, in one vector or matrix, usually called x, bur for you I'll call it bh. I don't know if bh is a 2-element vector or is a 10-element matrix or what, so my code which assumes that it is a 2-element vector might be incorrect.
You should have your objective function depend only on i, the index of the problem you are solving. Same for your nonlinear constraint function. Something like this:
function f = objfun(bh,i)
b = bh(1);
h = bh(2);
%Write your objective function in terms of i here
end
function [c,ceq] = confun(bh,i)
b = bh(1);
h = bh(2);
%Write your constraint function in terms of i here
end
After this, for each i you set your objective function to @(bh)objfun(bh,i) and likewise your constraint function to @(bh)confun(bh,i).
Alan Weiss
MATLAB mathematical toolbox documentation
2 Comments
Tarami Readus
on 2 Jul 2019
What does ceq mean?
Walter Roberson
on 2 Jul 2019
ceq is for Nonlinear Equality Constraints. c is for Nonlinear Inequality Constraints.
Categories
Find more on Solver Outputs and Iterative Display 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!