while loops

8 次查看(过去 30 天)
marvin corado
marvin corado 2011-3-5
回答: Van 2014-12-17
First time posting. Excuse if i do not post correctly. My problem is with a while loop. I created my self a short while loop test just to see how it works. i run it and it does what i want. that is to say increase mx by 1 until it hits 3, and then when sum is equal to summ, it performs a. here is what i wrote.
mx=1;
while mx<3.0 mx=mx+1; sum=mx*2; summ =4; if (sum==summ) break a=2*sum end end
My problem is that when i increase mx by 0.1 matlab does not perform the if statement. I know sum and summ will be equal at some point but matlabd never performs a. Any help? thank you.

采纳的回答

Matt Fig
Matt Fig 2011-3-5
Also, you might find Cleve's article interesting.
.
.
.
mx=1;
tol = 1e-8;
while mx<3.0
mx=mx+1;
sum=mx*2;
summ =4;
if abs(sum-summ)<tol
a=2*sum
break
end
end

更多回答(5 个)

Walter Roberson
Walter Roberson 2011-3-5
You will find an explanation at this FAQ
By the way, it is a bad practice to name one of your variables with the name of one of the built-in routines such as "sum". Don't make a habit of it or else it will cause you problems later -- problems that you will stare at and stare at and not see because you "know" what you mean the code to do.

marvin corado
marvin corado 2011-3-5
sorry i meant to put it like this.
mx=1;
while mx<3.0
mx=mx+1;
sum=mx*2;
summ =4;
if (sum==summ)
break
a=2*sum
end
end
  1 个评论
Walter Roberson
Walter Roberson 2011-3-5
You can go back and edit your question. Just select your code and click on the "Code {}" button.

请先登录,再进行评论。


marvin corado
marvin corado 2011-3-5
ok i read it and its helpful. I tried implementing a solution by using
areEssentiallyEqual = abs(a-b) < tol
like they say, but cant seem to get it working where would the fix above be placed ?

marvin corado
marvin corado 2011-3-5
ok what would establish the tol.. is it something i choose or something that needs to be calculated? thank you
  2 个评论
Matt Fig
Matt Fig 2011-3-5
Just like in my example above, tol is something you choose.
Walter Roberson
Walter Roberson 2011-3-5
Choosing a tolerance is fine if you know something about the floating point representation of the range of values you are using, but for more general usage the tolerance should usually be based upon eps() of the maximum magnitude of the values you are working with.

请先登录,再进行评论。


Van
Van 2014-12-17
I think the problem is the positioning. Isn't that the "a=2*sum" should be placed above the break?
%
mx=1;
while mx < 3.0
mx=mx+1;
sum=mx*2;
summ =4;
if (sum==summ)
a = 2*sum
break
end
end
which will result to 8. I hope i answer it correctly.

类别

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