Negative output Fsolve Function
조회 수: 6 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
채택된 답변
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
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Component-Based Modeling에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!