6 views (last 30 days)

I have posted similar things before, so apologies if you have already seen this.

My code is this:

clear

h(1)=100000; %Initial Height

t(1)=0;

dt=0.005; %Time Step

u=59.29; %Initial Velocity

a(1)=0.03535; %Initial Acceleration

v(1)=u+(a(1)*t(1)); %Velocity

p(1)=(((h(1))/71)+1.4); %Air Density

g(1)=(40*10^7)/((6371+h(1))^2); %Gravity

A=5; %Area

c=0.7;

m=850; %Mass

Fd(1)=0.5*c*(p(1))*A*(v(1))^2; %Air Resistance

i=1; %Loop counter

while h(end)>=0

t(i+1)=t(i)+dt;

h(i+1)=100000-(u*t(i+1))-(0.5*a(i)*t(i+1)^2); %Suvat s=ut+0.5*a*t^2

p(i+1)=(((h(i+1))/71)+1.4);

g(i+1)=(40*10^7)/((6371+h(i+1))^2);

Fd(i+1)=0.5*c*(p(i+1))*A*(v(i))^2;

a(i+1)=g(i+1)-(Fd(i+1)/m); %Acceleration=Gravity-(Fd/m)

v(i+1)=u+(a(i)*t(i+1)); %Suvat v=u+at

i=i+1;

end

The code is infinite. When I stop it running and plot a graph of (t,h) it appears that h drastically increases after the first time step. I cannot see why this is the case as the equation for height should mean h decreases as time goes in. Pehaps it is the order I have had to code my variables? I have tried various orders but coudnt get any to work without the error 'Index exceeds array elements (1)'. Any help would be appricieted.

Cris LaPierre
on 19 Mar 2020

Edited: Cris LaPierre
on 19 Mar 2020

Quick observation is that you are not being careful with your units. H is specified as height in km, but it looks like you are converting it to meters.

It also looks like you missed the negative sign in the calculation of rho (-H/71 + 1.4)

Sign in to comment.

darova
on 19 Mar 2020

Here are some tips

You forgot about units: height should be in km for density

darova
on 20 Mar 2020

You can use v*t to calculate distance only when you have v=constant (no changing)

But velocity in this case changes all the time

- Actually I have just thought,is it because you differentiate displacement to get velocity and then differengiate that to get acceleration?

There is no differentiation here. Only integration: h(i+1) = h(i) + v(i)*dt - integration (summation)

I can't explain it to you here. That is not that simple. You should dig into this by yourself. Practice

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 4 Comments

## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812139

⋮## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812139

## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812233

⋮## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812233

## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812282

⋮## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812282

## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812308

⋮## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/511654-kinematics-while-loop-is-infinite-plus-other-errors#comment_812308

Sign in to comment.