Infintite Loop- bisection search how to stop

1 次查看(过去 30 天)
function rootx = bisectionSearch (fhandle,a,b,epsilon)
while (b-a) > epsilon %assume a<b
m =(b+a)/2
fhandlem=fhandle(m);
if fhandlem == 0
rootx = m %If f(m) is equal to zero then return the root as m
else if sign (fhandle(m))== sign (fhandle(a)) %
a=m; % If f(m) has the same sign as f(a) Replace a with m
else
m=b;
end
end
end
m;
end
Hi guys this is an infinte loop and I do not know why or how to fix it Please help if possible. when I test it it keeps giving me m values repeatly of 1.75 and I dont think thats even the right answer. please Help!
  2 个评论
Matt J
Matt J 2012-10-4
It gives you m=1.75 repeatedly with what input arguments?
Michael  Kurniawan
Michael Kurniawan 2012-10-4
[x]=bisectionSearch(f,1,2,0.01) f= @(x)sin(x)-log(x+1)

请先登录,再进行评论。

采纳的回答

Matt J
Matt J 2012-10-4
编辑:Matt J 2012-10-4
In the case fhandlem==0, you should BREAK to terminate the loop. Also, you need b=m instead of m=b.
Finally, you could use an ELSEIF structure instead of ELSE...IF.
  7 个评论
Matt J
Matt J 2012-10-4
Move rootx=m to the last line of the function.

请先登录,再进行评论。

更多回答(0 个)

类别

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