Problem in fmincon solver
Mostrar comentarios más antiguos
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
Respuestas (1)
Amit
el 29 de Dic. de 2013
0 votos
what's the exitflag?
7 comentarios
Nikhil
el 29 de Dic. de 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
el 30 de Dic. de 2013
Amit
el 30 de Dic. de 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
el 4 de En. de 2014
Nikhil
el 4 de En. de 2014
Categorías
Más información sobre Systems of Nonlinear Equations en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!