Problem in fmincon solver
Show older comments
Hello all,
My aim is to solve for complicated non linear system of equations defined as follows:
Unknown variables: epsi, da, dr, phi1, Jr, Ja
Known variables: alpha= 40 deg, Z=16, Kn=4.5080*10(^5), Fr=Fa=17800
Equations are defined as follows:
epsi = 0.5 * (1 + da*tan(alpha) / dr)
phi1 = cosinv (-da*tan(alpha) / dr)
Jr=integration from -phi1 to phi1 of (1/(2*pi)) * (1 - (0.5/epsi) * (1-cos(theta) ) )^(1.5) * cos(theta)
Ja=integration from -phi1 to phi1 of (1/(2*pi)) * (1-(0.5/epsi) * (1-cos(theta) ) )^(1.5)
Fr / Fa = (Jr * cos(alpha)) / (Ja * sin(alpha))
To solve for these system of equations I am using fmincon function available in matlab..
My Matlab code is as follows:
Z=16, KN1=4.5080e5; Fr=Fa=17800; alpha=40;
%optimization for load distribution
%KN1=Kn(5);
%for i=1:1:length(Kn)
[dr, Epsi]=opt();
function [dopt,EPSI] = opt()
dr0=[0.08; 0.1];
lb=[0, 0];
ub=[1, 1];
Options=optimset('Algorithm','active-set','Display','Iter');
dopt=fmincon(@myfun,dr0,[],[],[],[],lb,ub,@mycon,Options);
EPSI=myfun(dopt);
end
function epsi=myfun(dr)
epsi=0.5*(1+dr(1)*tand(alpha)/(dr(2)));
end
function [c,ceq]=mycon(dr)
c=abs(-dr(1)*tand(alpha)/dr(2))-1;
phi1=acos(-dr(1)*tand(alpha)/dr(2));
epsi=0.5*(1+(dr(1)*tand(alpha)/dr(2)));
c=-1+(0.5/epsi).*(1-cos(phi1));
funr=@(theta)(1/(2*pi)).*(1-(0.5/epsi).*(1-cos(theta))).^(1.5).*cos(theta);
Jr=quad(funr,-phi1,phi1);
funa=@(beta)(1/(2*pi)).*(1-(0.5/epsi).*(1-cos(beta))).^(1.5);
Ja=quad(funa,-phi1,phi1);
ceq=real(Jr)*cosd(alpha)/(real(Ja)*sind(alpha))-Fr/Fa;
%c=[];
end
When I run this code, I am getting the optimized value of dr as [-0.0001, 0.0011]. This value is clearly beyond limiting values of dr. I am specifying lower bound of dr as [0,0]. I am unable to understand why Matlab is not considering specified boundaries. As well, my final answer is dependent on initial guess. If I change my initial guess then my final answer changes. Can somebody please help to resolve these issues??
Thanks in advance,
Nikhil
Answers (1)
Amit
on 29 Dec 2013
0 votes
what's the exitflag?
7 Comments
Nikhil
on 29 Dec 2013
no feasible solution found with exitflag -2. play around with other solvers and options ..
I also want to add that matlab sin, tan etc use radians and not degree
Nikhil
on 30 Dec 2013
Amit
on 30 Dec 2013
first of all, looking at the conditions, I think your overall set of eqn can be further simplified .. Fr/Fa = 1 and thus you dont have to compute Jr and Ja .. Also, fmincon is a minimizing algorithm .. it seems that you are minimizing epsi and not solving it. can you check that?
try different algorithm and see if that helps. Also, sometimes using a global minimization algorithm (like simulated annealing) can be ised to find initial guesses.
I finally got a hold of my computer to run Matlab to test it. First of all, if the equations mentioned here are valid, this becomes a nonlinear equation (without constrains) and you dont have to use fmincon at all to solve it. From you equation, I get this function:
function F = func(dr)
alpha = 40*pi()/180;
epsi = 0.5*(1+dr(1)*(tan(alpha))/dr(1));
phi1 = acos(-dr(1)*(tan(alpha))/dr(1));
funr=@(theta)(1/(2*pi)).*(1-(0.5/epsi).*(1-cos(theta))).^(1.5).*cos(theta);
funa=@(beta)(1/(2*pi)).*(1-(0.5/epsi).*(1-cos(beta))).^(1.5);
Jr=quad(funr,-phi1,phi1);
Ja=quad(funa,-phi1,phi1);
F = Jr*cos(alpha)-Ja*sin(alpha);
end
Here you are solving for F and can use fsolve instead of fmincon. Now, when I try to solve it, it gives me different solution each time depending on the initial guess. This might be due to these set of equations have multiple solutions. Are you sure the equations given here are correct? I dont see the use of variable like Z, Kn anywhere which you suggested as known variable.
Nikhil
on 4 Jan 2014
Nikhil
on 4 Jan 2014
Categories
Find more on Systems of Nonlinear Equations 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!