Looping until conditions met

조회 수: 63 (최근 30일)
Espen
Espen 2014년 11월 20일
편집: Espen 2014년 11월 20일
I have a (rather ineffective, but still does it's job) code doing a method I can only call "middlepoint method" as I lack any direct translation. But in basics it's an alternative method to Newtons Method and does the same thing but with MANY more repeats required.
Anyway here is the loop of the code itself; (note that before this there are a few lines containing the function and certain values, but they aren't important)
for n=1:inf
if f(y)<0
b=y
y=y/2
else y=((b+y)/2)
end
if f(y)==0
break
end
end
I know it's not pretty and might even be VERY inefficient, but it actually produces the answer down to 10^-15 accuracy. It takes 646 loops. Now normally that would be absolutely perfect, but the task itself only asks me to make a code that loops until the accuracy is within 10^-5 and how many loops this takes.
What I am wondering is this; is there something I can type in the "if f(y)" line (the one that breaks the for loop if certain conditions are met) that makes the loop stop after f(y) produces an answer between 0 to 0.0001 range rather than exactly 0?
  댓글 수: 1
the cyclist
the cyclist 2014년 11월 20일
You might also consider doing this with a while loop. Type
doc while
into the command window for details.

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

채택된 답변

Guillaume
Guillaume 2014년 11월 20일
Wouldn't that just be
if abs(f(y)) < 0.0001
break;
end
You shouldn't be using == to compare floating point values anyway. Particularly, if one of them come out as a result of a calculation.
  댓글 수: 1
Espen
Espen 2014년 11월 20일
편집: Espen 2014년 11월 20일
Yes, that's the command I was looking for. Thank you very much! And as for the f(y)==0 that was just there because that was the only one that made the loop go until a certain point was met.
Since the function had both negative and positive side (Like f(0.8) could give me -0.62 while f(0) gives me 1) just using one where f(y)>(some number) or f(y)<(some number) just made it stop far too prematurely since it would reach those levels interchangibly.
But again, I appreciate your time and help!

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

추가 답변 (1개)

Azzi Abdelmalek
Azzi Abdelmalek 2014년 11월 20일
You can use a while loop

카테고리

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