Kinematics while loop is infinite, plus other errors.
古いコメントを表示
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.
4 件のコメント
darova
2020 年 3 月 19 日
Can you show original equations?
Sam Potter
2020 年 3 月 19 日
darova
2020 年 3 月 19 日
Looks like differential equation. Can i see it on the paper or picture? Where did you get it?
Sam Potter
2020 年 3 月 19 日
回答 (2 件)
Cris LaPierre
2020 年 3 月 19 日
編集済み: Cris LaPierre
2020 年 3 月 19 日
0 投票
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)
darova
2020 年 3 月 19 日
0 投票
Here are some tips

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

10 件のコメント
Sam Potter
2020 年 3 月 19 日
編集済み: Walter Roberson
2020 年 3 月 20 日
darova
2020 年 3 月 19 日
This should give you an answer

Let me know if it's clear
darova
2020 年 3 月 19 日
Please use special button for code inserting

Sam Potter
2020 年 3 月 20 日
darova
2020 年 3 月 20 日
It's not that easy to explain it on your case. You have complicated example
Your equation is:
can be re-written as: 
I'll give you some links
Euler method - simplest method to solve numericaly diff. equation (used in your case)
ODE - what is differential equation
ode45 - main MATLAB solver of ordinary diff equations
Feel free to ask
darova
2020 年 3 月 20 日
- Also does the change in h have to be constant for it to work?
No. All variable can be different (even dt)
Sam Potter
2020 年 3 月 20 日
Sam Potter
2020 年 3 月 20 日
darova
2020 年 3 月 20 日
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
Sam Potter
2020 年 3 月 21 日
カテゴリ
ヘルプ センター および File Exchange で Programming についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!