How will use return conditions in solve function
15 ビュー (過去 30 日間)
古いコメントを表示
Hi,
I didnt get the answer for this solution. I get the message "Solutions are only valid under certain conditions.
To include parameters and conditions in the solution, specify the 'ReturnConditions' value as 'true'."while running the program.
can anyone help to get the solution?
clear all
clc
p=3200; Av=400;Ab=25;hv=4;hb=5;a=1500;c=5;
syms d1 d0;
for b=10:10:100
d0=(-8+4*sqrt(2))*(b/a)^2;
d1=(12-7*sqrt(2))*(b/a);
x=((a+b*c)-sqrt(2*hb*Ab*a)*d1)/(2*b+2*sqrt(2*Ab*hb*a)*d0)
Q=sqrt((b*(a-b*c)*Ab+sqrt(2*Ab*hb*a)*Ab*(2*a*d0+b*d1))/(hb*(b+sqrt(2*Ab*hb*a)*d0)))
syms M
m1=((a-b*x)*Av*2*p)/(hv*Q^2*(p-a+b*x));
M=m1;
for n = 2:1:6
if n*(n-1)<=M && n*(n+1)>=M;
x1=n
end
end
Pb=((a-b*x)*(x-c))-(((a-b*x)*Ab)/Q)-((hb*Q)/2)
TPv=(a*c)-(b*c*x)-(((a-b*x)*Av)/(x1*Q))-(((hv*Q)/2)*(x1*(1-(a-b*x)/p)-1+(((2*(a-b*x))/p))))
TPi=(a*x)-(b*(x^2))-(((a-b*x)*(Av+n*Ab)/(n*Q))-((hb*Q)/2)-(((hv*Q)/2)*(n*(1-(a-b*x)/p)-1+((2*(a-b*x))/p))));
TPj=0;
nmin=max(ceil(sqrt((Av*(hb-hv))/(Ab*hv))),1);
nmax=ceil(sqrt((Av*p*(hb-hv)+2*Av*hv*a)/(Ab*hv*(p-a))));
n=nmin
if n>=1
m1=a/b;
m2=-1/b;
m3=2*(Ab+Av/n)*(hb+(n-a)*hv);
m4=2*hv*(Ab+Av/n)*((2-n)*hv)/p;
syms D
S=(m1+2*m2*D-((m3+2*m4*D)/(2*sqrt(m3*D+m4*D^2))));
solve(S,D);
LO=solve(subs(S),'returnconditions', true);
LO=subs(LO);
LO1=LO(1);
if LO1 < a
D1=LO1;
else
D1=a;
end
x=(a-D1)/b
Q= sqrt((b*(a-b*x)*(Ab+Av/n))/(hb+hv*(n*(1-((a-b*x)/p))-1+((2*(a-b*x))/p))))
TPb=((a-b*x)*(x-c))-(((a-b*x)*Ab)/Q)-((hb*Q)/2)
TPv=(a*c)-(b*c*x)-(((a-b*x)*Av)/(n*Q))-(((hv*Q)/2)*(n*(1-(a-b*x)/p))-1+((2*(a-b*x))/p));
TP1=(a*x)-(b*(x^2))-(((a-b*x)*(Av+n*Ab)/(n*Q))-((hb*Q)/2)-(((hv*Q)/2)*(n*(1-(a-b*x)/p)-1+((2*(a-b*x))/p))));
if TP1>TPj
TPj=TP1
TPvj=(TPv/TPi)*TPj
TPbj=(TPb/TPi)*TPj
P1=(TPj-TPi)/TPi*100
else
n=n+1
if n <=nmax
m1=a/b;
m2=-1/b;
m3=2*(Ab+Av/n)*(hb+(n-1)*hv);
m4=2*hv*(Ab+Av/n)*((2-n)*hv)/p;
syms D
S=(m1+2*m2*D-((m3+2*m4*D)/(2*sqrt(m3*D+m4*D^2))));
solve(S,D);
LO=solve(subs(S));
LO=subs(LO);
LO1=LO(1);
if LO1 < a
D1=LO1;
else
D1=a;
end
x=(a-D1)/b
Q= sqrt((2*(a-b*x)*(Ab+Av/n))/(hb+hv*(n*(1-((a-b*x)/p))-1+((2*(a-b*x))/p))))
TPb=((a-b*x)*(x-c))-(((a-b*x)*Ab)/Q)-((hb*Q)/2)
TPv=(a*c)-(b*c*x)-(((a-b*x)*Av)/(n*Q))-(((hv*Q)/2)*(n*(1-(a-b*x)/p))-1+((2*(a-b*x))/p));
TP1=(a*x)-(b*(x^2))-(((a-b*x)*(Av+n*Ab)/(n*Q))-((hb*Q)/2)-(((hv*Q)/2)*(n*(1-(a-b*x)/p)-1+((2*(a-b*x))/p))));
if TP1>TPj
TPj=TP1
TPvj=(TPv/TPi)*TPj
TPbj=(TPb/TPi)*TPj
P1=(TPj-TPi)/TPi*100
else
n=n+1
if n <=nmax
m1=a/b;
m2=-1/b;
m3=2*(Ab+Av/n)*(hb+(n-1)*hv);
m4=2*hv*(Ab+Av/n)*((2-n)*hv)/p;
syms D
S=(m1+2*m2*D-((m3+2*m4*D)/(2*sqrt(m3*D+m4*D^2))));
solve(S,D);
LO=solve(subs(S));
LO=subs(LO);
LO1=LO(1);
if LO1 < a
D1=LO1;
else
D1=a;
end
x=(a-D1)/b
Q=sqrt((2*(a-b*x)*(Ab+Av/n))/(hb+hv*(n*(1-((a-b*x)/p))-1+((2*(a-b*x))/p))))
TPb=((a-b*x)*(x-c))-(((a-b*x)*Ab)/Q)-((hb*Q)/2);
TPv=(a*c)-(b*c*x)-(((a-b*x)*Av)/(n*Q))-(((hv*Q)/2)*(n*(1-(a-b*x)/p))-1+((2*(a-b*x))/p));
TP1=(a*x)-(b*(x^2))-(((a-b*x)*(Av+n*Ab)/(n*Q))-((hb*Q)/2)-(((hv*Q)/2)*(n*(1-(a-b*x)/p)-1+((2*(a-b*x))/p))));
if TP1>TPj
TPj=TP1
TPvj=(TPv/TPi)*TPj
TPbj=(TPb/TPi)*TPj
P1=(TPj-TPi)/TPi*100
else
n=n+1
end
end
end
end
end
end
end
3 件のコメント
回答 (1 件)
Sulaymon Eshkabilov
2022 年 12 月 30 日
(1) You have employed the solve() fcn for a few times and no output variable was assigned. It is better to use this syntax:
[SOL_D, Params, Conds] = solve(S,D,'ReturnConditions',true);
(2) Yoy are assigning a non-numeric value to a new variable and comparing against numerical value 'a':
LO=subs(LO); % Makes no sense here as "LO" defined above
LO1=LO(1); % Wrong: LO(1) does not exist. LO is a structure variable.
if LO1 < a % Wrong:
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!