Running like a forever loop

조회 수: 4 (최근 30일)
Karlie Brillant
Karlie Brillant 2019년 3월 27일
댓글: Steven Lord 2019년 3월 27일
I am working on the following function
function [x,y]=projectile(V_int,theta,dt)
time=dt; %(seconds)
k=0.32; %drag coefficient (given)
g=-9.81; %(m/s^2)
%First time step in x direction
x(1)=0; %initial x position
v_int_x=V_int*cos(theta); %initial velocity in x direction
a_x=v_int_x*k; %initial acceleration in x direction
x(2)=x(1)+v_int_x*time+0.5*a_x*(time^2); %second position in x direction
v_fin_x=v_int_x+a_x*time;
%First time step in y direction
y(1)=0;
v_int_y=V_int*sin(theta);
a_y=g-v_int_y*k;
y(2)=y(1)+v_int_y*time+0.5*a_x*(time^2);
v_fin_y=v_int_y+a_y*time;
time=time+dt;
i=3; %counter
while y(i-1)>=0
%calculates x values
a_x=-v_fin_x*k;
x(i)=x(i-1)+v_fin_x*time+0.5*a_x*(time^2);
v_fin_x=v_fin_x+a_x*time;
%calculates y values
a_y=v_fin_y*k;
y(i)=y(i-1)+v_fin_y*time+0.5*a_y*(time^2);
v_fin_y=v_fin_y+a_y*time;
%change counter and timestep to continue loop
i=i+1;
time=time+dt;
end
plot(x,y)
title('Path of Projectile');
xlabel('Distance of Projectile (meters)');
ylabel('Height of Projectile (meters)');
axis([0 max(x)+50 0 max(y)+50]); %axes for plot
x_distance=max(x);
end
I am trying to run it using this script
for theta=0:pi %degrees
V_int=sum('karlie');
dt=0.5; %second(s)
[x,y]=projectile(V_int,theta,dt);
end
index=(find(x==max(x_)));
max_theta=theta(index);
fprintf('The projectile will travel furthest at an angle of %2.2f degrees\n', max_theta);
However, when I run my script it gets stuck running like a forever loop and I have to terminate it. Not sure why this is happening.
  댓글 수: 2
Star Strider
Star Strider 2019년 3월 27일
your ‘y’ vector increases without bound. After 25 iterations, your projectile has traveled 23.3961e+012 metres, so it is apparently in interstellar space.
Change the first statement of your while loop to something like this:
while y(i-1)>=0 & (i <= 25)
until you figure out what the problem is with your code. That limits the number of iterations, making effective troubleshooting easier.
Steven Lord
Steven Lord 2019년 3월 27일
I suspect it's the introduction of anti-gravity.
%calculates y values
a_y=v_fin_y*k;
y(i)=y(i-1)+v_fin_y*time+0.5*a_y*(time^2);
v_fin_y=v_fin_y+a_y*time;
Shouldn't these lines of code make use of g somewhere? It might be useful to write the mathematical expression each line or each section of your code implements as a comment before that line or section, so you can easily check if your equation and your code are doing the same thing.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

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