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
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).
采纳的回答
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
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
2022-7-21
编辑: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 Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!