Restarting a for-loop when a condition is met

8 次查看(过去 30 天)
I am trying to make a movie 60 frames long which shows a change in pressure profile over 60 months. I have a for-loop which calculates vector V for each month m=1:60. Then a nested for-loop which calculates the pressure at 101 equidistant points. This gives me 60 pressure profiles which I've been able to play frame-by-frame.
Problem: Now I want the first for-loop to restart whenever a pressure value drops below a value x. I've tried using an if-statement and a while-loop but I can't seem to get it to work/put it in the right place. Maybe this is because I've used the variable m in a lot of the subsequent calculations. I realize that the loop will never finish but I only need 60 iterations.
for m=1:N
V(m) = (4*q)/(pi*((d-wm*(m))^2));
for i = 1:n
P1(i,m) = p - r*g*H(i) - r/(2*(d-wm*(m)))*f*V(m)^2*D(i);
end
plot(P1(:,m),'r-')
title('Pressure along pipeline', 'FontSize', 14);
xlabel('Distance', 'FontSize', 14);
ylabel('Pressure [Pa]', 'FontSize', 14);
xlim([1 100]), ylim([0 p])
ss = strcat('Month',{' '},num2str(m));
legend(ss)
grid
M(:,m) = getframe;
pause(0.1)
end
  5 个评论
dpb
dpb 2015-9-14
'Not a Number' but the plotting routines ignore NaN when drawing. If you terminate the loop early, the sizes will be noncommensurate in array Pi and you'll have to have cell array to store the results or will get mismatch in lengths that have to deal with (although if you preallocate to NaN on size(m*n) you'll get to the same place in the end, just that using the vectorized solution is the more "Matlab-y" way, avoiding loops).
NotSoWiseman
NotSoWiseman 2015-9-14
Okay that actually makes a lot of sense. I understand vectorization is preferable for a number of reasons, however the assignment explicitly states we have to use for-loops and an if-statement to implement the criteria... I'll still try and use the approach you suggested approach

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2015-9-14
You would not do this with a for loop, you would do it with a while loop.
m = 1;
while m <= N
.....
if some condition
m = 1;
else
m = m + 1;
end
end
  3 个评论
Catherine Fung
Catherine Fung 2017-6-8
I know this is a very old post. But I wanted to do the same thing and I also noticed that it looped infinitely after the condition is met as well. Can you explain what you meant by replacing it with a different variable to make it work? Thanks!
Ajeet Bahadur Singh
编辑:Ajeet Bahadur Singh 2022-7-21
I followed the same and its working fine, thanks a lot. But the only issue is that while loop is running forever (Although I can stop it manually after certain accuracy is achieved) probably because it is minimizing the error (as in my case) all the way upto infinite decimal points. Is there a way to reduce the accuracy upto certain decimal points only of finding the error of my solution?

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by