Infintite Loop- bisection search how to stop

1 visualización (últimos 30 días)
Michael  Kurniawan
Michael Kurniawan el 4 de Oct. de 2012
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 comentarios
Matt J
Matt J el 4 de Oct. de 2012
It gives you m=1.75 repeatedly with what input arguments?
Michael  Kurniawan
Michael Kurniawan el 4 de Oct. de 2012
[x]=bisectionSearch(f,1,2,0.01) f= @(x)sin(x)-log(x+1)

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 4 de Oct. de 2012
Editada: Matt J el 4 de Oct. de 2012
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 comentarios
Michael  Kurniawan
Michael Kurniawan el 4 de Oct. de 2012
Thank you!!
Matt J
Matt J el 4 de Oct. de 2012
Move rootx=m to the last line of the function.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by