A for loop that will run until a specific mathematical value is found
7 次查看(过去 30 天)
显示 更早的评论
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 个评论
Dyuman Joshi
2023-10-4
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
2023-10-4
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.
采纳的回答
Alan Stevens
2023-10-4
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Particle & Nuclear Physics 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!