Negative output Fsolve Function

조회 수: 6 (최근 30일)
K.G
K.G 2019년 7월 31일
답변: Sai Sri Pathuri 2019년 8월 7일
Hi all,
can anyone help me understand why I am getting a negative output from this code and how can I modify the code so I do not get a negative output?
function [x,exitflag]= Function_final(c)
c=[10^-7,10^-7,0.5*10^-3,0.5*10^-3,0.25*10^-3,0.25*10^-3,0.25*10^-3,0.25*10^-3,0.5*10^-3,0.5*10^-3,0.5*10^-3,0.5*10^-4,0.25*10^-1,0.5*10^-4,0.5*10^-6];
MaT = c(3)+c(4)+c(9)+c(10)+c(11)+c(12);
MbT = c(5)+c(6)+c(7)+c(8)+c(9)+c(10)+c(11);
McT = c(2)+c(6)+2*c(7)+3*c(8)+c(9)+2*c(10)-c(1)-c(4)+c(13)+2*c(15)+c(12);
MdT = c(12)+c(13)+c(14)+c(15);
z=[1,1,2,1,3,2,1,0,0,1,1,1,1,2,0];
T=36;
I=0.5*sum(c.*z.^2);
A=0.486+(6.07*10^-4)*T+(6.43*10^-6)*T^2;
gamma_initial=zeros(1,15);
for i=1:15
gamma_initial(i)=10^(-A*z(i)^2*(I^0.5/(1+I^0.5)-0.3*I));
end
p = [gamma_initial, c];
options=optimoptions('fsolve','Display','iter');
[x,exitflag]=fsolve(@(x)Approach(x,MaT,MbT,McT,MdT),p,options);
end
function F = Approach(p,MaT,MbT,McT,MdT)
K1 = 1.01*10^-14;
K2 = 2.13*10^-13;
K3 = 1.14*10^12;
K4 = 1.73*10^19;
K5 = 2.71*10^21;
K6 = 5.36*10^14;
K7 = 3.41*10^20;
K8 = 1.18*10^7;
K9 = 4.01;
K10= 1.74*10^10;
K11 = 3.09*10^3;
z=[1,1,2,1,3,2,1,0,0,1,1,1,1,2,0];
T=36;
A=0.486+(6.07*10^-4)*T+(6.43*10^-6)*T^2;
c = p(16:30);
la = log10(p(1:15));
I=0.5*sum(c.*z.^2);
F(1) = la(1)^2 - la(1) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(2) = la(2)^2 - la(2) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(3) = la(3)^2 - la(3) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(4) = la(4)^2 - la(4) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(5) = la(5)^2 - la(5) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(6) = la(6)^2 - la(6) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(7) = la(7)^2 - la(7) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(8) = la(8)^2 - la(8) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(9) = la(9)^2 - la(9) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(10) = la(10)^2 - la(10) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(11) = la(11)^2 - la(11) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(12) = la(12)^2 - la(12) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(13) = la(13)^2 - la(13) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(14) = la(14)^2 - la(14) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(15) = la(15)^2 - la(15) * (I*A*z(1)^2) * 2.6 - 1/(1-I)^2 * A^2 * z(1)^4 * (I - 1.69 * I^2 - 0.09 * I^4);
F(16) = (K1*(10^la(2)*p(17))^(-1))-(10^la(1)*p(16));
F(17) = (K2*(10^la(3)*p(18))*(10^la(1)*p(16)))-(10^la(4)*p(19));
F(18) = (K3*(10^la(5)*p(20))*(10^la(2) *p(17)))-(10^la(6)*p(21));
F(19) = (K4*(10^la(5)*p(20))*(10^la(2)*p(17))^2)-(10^la(7)*p(22));
F(20) = (K5*(10^la(5)*p(20))*(10^la(2)*p(17))^3)-(10^la(8)*p(23));
F(21) = (K6*(10^la(3)*p(18))*(10^la(5)*p(20))*(10^la(2)*p(17)))-(10^la(9)*p(24));
F(22) = (K7*(10^la(3)*p(18))*(10^la(5)*p(20))*(10^la(2)*p(17))^2)-(10^la(10)*p(25));
F(23) = (K8*(10^la(3)*p(18))*(10^la(5)*p(20)))-(10^la(11)*p(26));
F(24) = (K9*(10^la(3)*p(18))*(10^la(14)*p(29))*(10^la(2)*p(17)))-(10^la(12)*p(27));
F(25) = (K10*(10^la(2)*p(17))*(10^la(14)*p(29))) - (10^la(13)*p(28));
F(26) = (K11*((10^la(2)*p(17))^2)*(10^la(14)*p(29))) - (10^la(15)*p(30));
F(27) = p(18)+p(19)+p(24)+p(25)+p(26)-MaT;
F(28) = p(20)+p(21)+p(22)+p(23)+p(24)+p(25)+p(26)-MbT;
F(29) = p(17)+p(21)+2*p(22)+3*p(23)+p(24)+2*p(25)-p(16)-p(19)-McT;
F(30) = p(27)+p(28)+p(29)+p(30)-MdT;
F = [F(1);F(2);F(3);F(4);F(5);F(6);F(7);F(8);F(9);F(10);F(11);F(12);F(13);F(14);F(15);F(16);F(17);F(18);F(19);F(20);F(21);F(22);F(23);F(24);F(25);F(26);F(27);F(28);F(29);F(30);
end

채택된 답변

Sai Sri Pathuri
Sai Sri Pathuri 2019년 8월 7일
The negative value for exitflag is obtained because the equation is not solved due to tolerances. Try to execute by setting the appropriate values of tolerances.
Refer the following link for troubleshooting

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Component-Based Modeling에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by