필터 지우기
필터 지우기

Terminate a loop when conditions met and then display other conditions

조회 수: 1 (최근 30일)
Nathan Stone
Nathan Stone 2016년 11월 28일
댓글: Walter Roberson 2016년 11월 28일
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.

답변 (1개)

Walter Roberson
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
Nathan Stone
Nathan Stone 2016년 11월 28일
Thank you for your answer. It does not help me, but that is because I have only the most basic understanding of matlab, I suspect if I knew more about matlab your answer would get me where I need to go.
Im learning that Im way out of my depth with matlab, it was really only a side component of a course I am doing and at this time I lack the skills to do what I am trying to do.
thank you!
Walter Roberson
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 CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by