There is a function that solve a system of equations with various restrictions?

4 次查看(过去 30 天)
clear; clc
v=1.20e-6;
e=4.6e-5;
g=9.80665;
D=[0.3636 0.3636 0.4096 0.289 0.3636 0.3636 0.289 0.317];
L=[25 20 12 20 20 12 25 20];
Q=ones(1,8);
Re=ones(1,8);
f=ones(1,8);
hL=ones(1,8);
p=ones(1,8);
The metod to solve this particular problem needs the asumption of three values for Q and with those calculate the rest of the Qs.
But those Qs needs to satisfy three conditions; all of DQs must be less than 1e-4. (And all of the variables in the code needs to be positive real values).
Q1c=0.3970;
Q4c=0.0934;
Q8c=0.4340;
DQ1=0;
DQ2=0;
DQ3=0;
while abs(Q(1)/Q1c-1)>1e-3
Q(1)=Q1c-DQ1;
Q(4)=Q4c-DQ2;
Q(8)=Q8c-DQ3;
Q(2)=0.6-Q(1);
Q(3)=1+Q(4)-Q(1);
Q(5)=Q(2)+0.6-Q(3);
Q(6)=Q(5)+Q(8);
Q(7)=0.8-Q(8);
for i=1:8
Re(i)=4*Q(i)/(pi*D(i)*v);
end
for i=1:8
f(i)=0.25*(log10(e/(3.7*D(i))+5.74/(Re(i)^(0.9))))^(-2);
end
for i=1:8
hL(i)=8*f(i)*L(i)/(g*pi^(2)*D(i)^(5))*Q(i)^(2);
end
sum1=hL(3)+hL(2)-hL(1);
sum2=hL(5)+hL(6)-hL(3)-hL(4);
sum3=hL(7)-hL(6)-hL(8);
for i=1:8
p(i)=16*f(i)*L(i)/(g*pi^(2)*D(i)^(5))*Q(i);
end
sumk1=sum(p(1:3));
sumk2=sum(p(3:6));
sumk3=sum(p(6:8));
DQ1=sum1/sumk1;
DQ2=sum2/sumk2;
DQ3=sum3/sumk3;
end
Q(1)=Q1c;
Q(4)=Q4c;
Q(8)=Q8c;

回答(1 个)

JESUS DAVID ARIZA ROYETH
debes convertir tu código a función, donde la entrada sean las 3 Q que asumes y la salida el resto de Qs, y luego de eso utilizar el sistema de restricciones de Matlab https://la.mathworks.com/help/optim/ug/nonlinear-systems-with-constraints.html
además de esto tienes for que no son necesarios :
you can convert your code to function, where the input is the 3 Q that you assume and the output the rest of Qs, and after that use the Matlab restriction system https://la.mathworks.com/help/optim/ug /nonlinear-systems-with-constraints.html
furthermore you have unnecessary for loops:
v=1.20e-6;
e=4.6e-5;
g=9.80665;
D=[0.3636 0.3636 0.4096 0.289 0.3636 0.3636 0.289 0.317];
L=[25 20 12 20 20 12 25 20];
Q=ones(1,8);
Re=ones(1,8);
f=ones(1,8);
hL=ones(1,8);
p=ones(1,8);
Q1c=0.3970;
Q4c=0.0934;
Q8c=0.4340;
DQ1=0;
DQ2=0;
DQ3=0;
while abs(Q(1)/Q1c-1)>1e-3
Q(1)=Q1c-DQ1;
Q(4)=Q4c-DQ2;
Q(8)=Q8c-DQ3;
Q(2)=0.6-Q(1);
Q(3)=1+Q(4)-Q(1);
Q(5)=Q(2)+0.6-Q(3);
Q(6)=Q(5)+Q(8);
Q(7)=0.8-Q(8);
Re=4*Q./(pi.*D.*v);
f=0.25*(log10(e./(3.7*D)+5.74./(Re.^(0.9)))).^(-2);
hL=8*f.*L./(g*pi.^(2).*D.^(5)).*Q.^2;
sum1=hL(3)+hL(2)-hL(1);
sum2=hL(5)+hL(6)-hL(3)-hL(4);
sum3=hL(7)-hL(6)-hL(8);
p=16.*f.*L./(g*pi.^2.*D.^5).*Q;
sumk1=sum(p(1:3));
sumk2=sum(p(3:6));
sumk3=sum(p(6:8));
DQ1=sum1/sumk1;
DQ2=sum2/sumk2;
DQ3=sum3/sumk3;
end
Q(1)=Q1c;
Q(4)=Q4c;
Q(8)=Q8c;

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by