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

4 vues (au cours des 30 derniers jours)
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;

Réponses (1)

JESUS DAVID ARIZA ROYETH
JESUS DAVID ARIZA ROYETH le 5 Fév 2020
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;

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by