Terminate a loop when conditions met and then display other conditions
1 次查看(过去 30 天)
显示 更早的评论
What I am trying to do here is have x displayed when y=0.
I am using a while loop for trajectory of a projectile.
I want to know what x is at the point when y~0. or close enough to zero since the formula will not give exactly zero.
I know all the information is currently in matlab because i can scroll through the y values, find the loop number n, and then find x for that loop number.
What I want to know is how to do this quickly, without having to look through 2000 loops for the point when y is roughly zero
code is as follows:
%PULL LENGTH
L=0.2;
%LAUNCH ANGLE
theta(1)=45;
%INITIAL POSITION OF LAUNCH
x(1)=0;
y(1)=0.6;
%INITIAL VELOCITY
g=9.81;
%MASS OF BALL
mb=0.0116;
%MASS TOTAL
mt=0.08193;
%SPRING CONSTANT
k=42; %N*m IN EACH OF 4 SPRINGS
%PRE-LOAD
p=0.0125;
%INITIAL VELOCITY AND COMPONENTS
v(1)=sqrt((4*k*(L^2-p^2)-2*mt*g*L*sin(theta(1)))/mt);
vx(1)=v(1)*cos(theta(1));
vy(1)=v(1)*sin(theta(1));
%DRAG
d=(0.01588*2);
A=pi()*d^2/4;
rho=1.2;
cd=0.5;
D=1/2*cd*rho*A;
%TRAJECTORY LOOP
del_t=0.002;
while y(n)>0
n=1:2000;
t(n)=n*del_t;
v(n)=sqrt(vx(n)^2+vy(n)^2);
theta(n)=atan(vy(n)/(vx(n)));
Fd(n)=D*v(n)^2;
ax(n)=-Fd(n)*cos(theta(n))/mb;
ay(n)=-Fd(n)*sin(theta(n))/mb-g;
x(n+1)=x(n)+vx(n)*del_t;
y(n+1)=y(n)+vy(n)*del_t;
vx(n+1)=vx(n)+ax(n)*del_t;
vy(n+1)=vy(n)+ay(n)*del_t;
end
plot(x,y);
axis([0,10,-1,10])
Right now the code ignores the while part and just loops 2000 times regardless. I either want it to stop when y=0 or display x when y=0.
0 个评论
回答(1 个)
Walter Roberson
2016-11-28
while y(n)>0
means the same as
while all(y(n)>0)
You might think you are dealing with a scalar quantity but you have
n=1:2000;
so you are dealing with a vector.
2 个评论
Walter Roberson
2016-11-28
Change the lines
while y(n)>0
n=1:2000;
to
n = 1;
while y(n)>0
and then just after the line
vy(n+1)=vy(n)+ay(n)*del_t;
add the line
n = n + 1;
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!