break out of for loop help

I have this for loop which works perfectly fine except that I want it to stop the for loop when y=0. The loop is calculating trajectory so I want it to stop when the ball hits the ground (or y=0). I have tried everything I can think of but nothing works. It either doesn't stop the loop or it returns the completely wrong y values. I've tried if y==0, y<=0, y(n)==0, y(n)<=0, y(n+1)==0, y(n+1)<=0, and putting it before and after the calculations. nothing worked Please help.
for n=1:N
ax(n+1) = -D*vx(n)*v(n);
ay(n+1) = -D*vy(n)*v(n)-g;
v(n+1) = sqrt(vx(n)^2+vy(n)^2);
x(n+1) = x(n)+T*vx(n)+0.5*T^2*ax(n);
vx(n+1) = vx(n)+T*ax(n);
y(n+1) = y(n)+T*vy(n)+0.5*T^2*ay(n);
vy(n+1) = vy(n)+T*ay(n);
if y(n+1)==0, break; end
end

2 Comments

Jan
Jan on 20 Oct 2011
Please post your initial values such that we can run your code.
h=1;
C=0.5;
R=0.0366;
p=1.2;
m=0.145;
g=9.81;
D=C*p*pi*R^2/(2*m);
vo=90*0.44704;
th0=30*(pi/180);
Tmax=vo*sin(th0)/g+sqrt(2*h/g+vo^2*sin(th0)^2/g^2);
T=1/100;
t=0:T:Tmax;
N=floor(Tmax/T);
v(1)=vo;
x(1)=0;
vx(1)=vo*cos(th0);
y(1)=h;
vy(1)=vo*sin(th0);
ax(1)=-D*vx(1)*v(1);
ay(1)=-D*vy(1)*v(1)-g;

Sign in to comment.

 Accepted Answer

Jan
Jan on 21 Oct 2011
The loop does stop. You can check this by a disp statement before the break.
I assume you have written the code into a script and y is defiend from an earlier run. Then a "clear" statement on top would be helpful - not "clear all". Or you could convert it to a function by inserting this as first line:
function myIntegrator
or what ever your file is called.
Note: Using several commands in one line impedes debugging. You cannot set a breakpoint on the break command in:
if y(n+1)==0, break; end
But this would have revealed the problem.

1 Comment

i didn't mean to hit answer accepted, oops.
how does it fill it with only 1 iteration? shouldn't it do it from 1 to N? what would you suggest to get it to stop when y=0?

Sign in to comment.

More Answers (1)

It probably won't hit 0.0000000000000000000 exactly. It might get to 0.000000000000002, so check if it's close:
if abs(y(n+1)) < 0.0001 % Some tolerance.
break;
end

1 Comment

still not stopping it for some reason

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 20 Oct 2011

Community Treasure Hunt

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

Start Hunting!