A for loop that will run until a specific mathematical value is found
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mahmut Cenk
el 4 de Oct. de 2023
Comentada: Mahmut Cenk
el 4 de Oct. de 2023
Hello, I am very new to Matlab and I am pretty much sure that my issue is a very simple one; still couldn't find a clear solution so wanted to ask: I want to calculate some internal hydraulic parameters of a marine outfall diffuser pipe, and for the for loop, I want it to continue until the project discharge Q is a certain value, like 350 l/s. The code is here, which is not written by me, and in the code the number of ports discharging the effluent is known, and the discharge is unknown. I want it to be the opposite, the discharge is known and the number of ports required to discharge that amount of effluent should be determined by looking at the number of iterations of course. Thanks in advance!
g=9.81; % (m/s2)
Vmin=0.55; % (m/s)
Vmax=1.2; % (m/s)
f=0.03; % dimensionless
L=5; % (m)
hf(1)=0; % (m)
e(1)=0.23; % (m)
cq(1)=0.91; % dimensionless
D(1:10)=0.15; %(m)
%First Port
a(1)=pi*(D(1))^2./4; % (m2)
q(1)=cq(1)*a(1)*sqrt(2*g*e(1)); %[m3/s]
Q(1)=q(1); % (m3/s)
d(1)=floor(100*(sqrt(4*Q(1)/(pi*Vmin))))/100; % (m)
V(1)=Q(1)/(pi*(d(1)^2./4)); % (m/s)
U(1)=q(1)/(pi*D(1)^2./4); % (m/s)
%Ports 2-10
for i=2:10
hf(i)=f*(L/d(i-1))*(V(i-1)^2./(2*g)); % (m)
e(i)=e(i-1)+hf(i); % (m)
cq(i)=0.975*(1-((V(i-1))^2)/(2*g*e(i)))^(3/8); % boyutsuz
a(i)=pi*(D(i))^2./4; % (m2)
q(i)=cq(i)*a(i)*sqrt(2*g*e(i)); % (m3/s)
Q(i)=Q(i-1)+q(i); % (m3/s)
d(i)=d(i-1); % (m)
V(i)=Q(i)/(pi*(d(i)^2./4)); % (m/s)
while (V(i) >= Vmax)
d(i)=floor(100*(sqrt(4*Q(i)/(pi*Vmin))))/100;
V(i)=Q(i)/(pi*(d(i)^2./4));
end
U(i)=q(i)/(pi*D(i)^2./4); % (m/s)
end
%Results
results=zeros(10,9);
results(:,1)=transpose(hf);
results(:,2)=transpose(e);
results(:,3)=transpose(cq);
results(:,4)=transpose(q);
results(:,5)=transpose(Q);
results(:,6)=transpose(d);
results(:,7)=transpose(V);
results(:,8)=transpose(U);
results(:,9)=transpose(Q)*1000;
max(q)/min(q)
results
2 comentarios
Dyuman Joshi
el 4 de Oct. de 2023
It's not clear to me what the code does or what you want to do.
"and for the for loop, I want it to continue until the project discharge Q is a certain value, like 350 l/s."
%Results
results=zeros(10,9);
results(:,1)=transpose(hf);
results(:,2)=transpose(e);
results(:,3)=transpose(cq);
results(:,4)=transpose(q);
results(:,5)=transpose(Q);
results(:,6)=transpose(d);
results(:,7)=transpose(V);
results(:,8)=transpose(U);
results(:,9)=transpose(Q)*1000;
This can be modified to
results = [hf;e;cq;q;Q;d;V;U;1000*Q].'
Sam Chak
el 4 de Oct. de 2023
Hi @Mahmut Cenk
When an object is subjected to the force of gravity and undergoes motion, whether it involves the discharge of a substance from a pipe over time or the transport of a substance in a pipe across a certain distance during a specific time interval, such behavior is deemed dynamic rather than static. Consequently, there must exist a set of differential equations that can elucidate this motion. However, I am unable to discern such equations within your code. It is plausible that you have discretized the system and incorporated it within the confines of a for-loop.
Nevertheless, it is highly desirable to have access to the mathematical representation of the continuous-time motion system model. This is how we characterize natural motion. Furthermore, algorithms are derived directly from the mathematical model, providing a means to cross-verify the accuracy of your code implementation.
Respuesta aceptada
Alan Stevens
el 4 de Oct. de 2023
You could try replacing the "for i = 2:10 " loop by something like
nports = 1;
while Q(i)<Qdesired
nports = nports + 1
for i = 2:nports
% etc
end
end
Más respuestas (0)
Ver también
Categorías
Más información sobre Particle & Nuclear Physics en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!