why is this "if" statement is never true?

Can someone please explain why this "if" statement is never true? It is supposed to allow me to take the elements at every even integer of Time (i.e. 2 4 6...) while Time is increasing by 0.1 every time through the while statement.
I have gone through the program step by step and have actually viewed my j = 2, and Time = to 2.0000 and it still goes to the "else" command. I've also written the same if statement outside of this script and it works.
Any ideas? Your help is appreciated!
dt = 0.1;
i = 1;
j = 0;
Time = 0;
TimeMax = 20000;
while Time < TimeMax
Mass0 = ...
Altitude0 = ...
Velocity0 = ...
Gamma0 = ...
Radius0 =...
Nu0 = ...
Time = Time + dt;
j = 2+j;
if j == Time
i = i+1;
Mass(i)= Mass0;
Altitude(i) = Altitude0;
Velocity(i) = Velocity0;
Gamma(i) = Gamma0;
Radius(i)=Radius0;
Nu(i) = Nu0;
else
j = j-2;
end
end

댓글 수: 1

Youssef  Khmou
Youssef Khmou 2013년 2월 13일
is the variables Mass, Velocity... are constant then make them outside the "while" loop to gain memory .

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

답변 (3개)

Walter Roberson
Walter Roberson 2013년 2월 13일

2 개 추천

댓글 수: 5

Brooke
Brooke 2013년 2월 13일
actually, this is what I needed. the mod doesn't handle the equivalence properly. I accepted his answer to soon. my apologies. thank you for your kind help!
Youssef  Khmou
Youssef Khmou 2013년 2월 13일
ok, we can work on it until it work correctly, no problem !
Walter Roberson
Walter Roberson 2013년 2월 13일
The basic problem was floating point comparisons and round-off, that adding 10 copies of 0.1 does not give you exactly 1. If you know your dt is 1/P for an integer P, then add 1 to your counter each instance instead of adding 1/P, and if you need the time the counter represents, divide the counter by P; even then better to compare the integer counter to (time_limit * P) rather than comparing (counter / P) to time_limit
Youssef  Khmou
Youssef Khmou 2013년 2월 13일
Correct !, we found that error , thanks
Image Analyst
Image Analyst 2013년 2월 14일
Go ahead and mark it Accepted then.

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

Brooke
Brooke 2013년 2월 13일

0 개 추천

thank you so much! I was getting so frustrated over here. Many thanks!

댓글 수: 1

Youssef  Khmou
Youssef Khmou 2013년 2월 13일
how is the equivalence you want? if my answer is not the right one, delete it to get better solution !

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

Youssef  Khmou
Youssef Khmou 2013년 2월 13일
편집: Youssef Khmou 2013년 2월 13일

0 개 추천

Hi, i saw that the answer is not satisfactory, because we evaluate for 20000 points in Time and get only 20 values in Mass, Veloc... the reason is because i made mistake putting Mod(j,Time) while i should put " Mod(Time,j)" or Mod(Time,2) , with this alteration we get the logical lenght for Mass perxample which is 10001, and also changing dt to 1 :
dt = 1;
i = 1;
j = 0;
Time = 0;
TimeMax = 20000;
Mass0 =2;
Altitude0 =58;
Velocity0 = pi;
Gamma0 =77;
Radius0 =7.25;
Nu0 = 77;
while Time < TimeMax
Time = Time + dt;
j = 2+j;
if mod(Time,2)==0 % if mod(time,j)==0
i = i+1;
Mass(i)= Mass0;
Altitude(i) = Altitude0;
Velocity(i) = Velocity0;
Gamma(i) = Gamma0;
Radius(i)=Radius0;
Nu(i) = Nu0;
else
j = j-2;
end
end
Is that the equivalence you talked about ?

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

2013년 2월 13일

Community Treasure Hunt

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

Start Hunting!

Translated by