Infintite Loop- bisection search how to stop

3 vues (au cours des 30 derniers jours)
Michael  Kurniawan
Michael Kurniawan le 4 Oct 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 commentaires
Matt J
Matt J le 4 Oct 2012
It gives you m=1.75 repeatedly with what input arguments?
Michael  Kurniawan
Michael Kurniawan le 4 Oct 2012
[x]=bisectionSearch(f,1,2,0.01) f= @(x)sin(x)-log(x+1)

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 4 Oct 2012
Modifié(e) : Matt J le 4 Oct 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 commentaires
Michael  Kurniawan
Michael Kurniawan le 4 Oct 2012
Thank you!!
Matt J
Matt J le 4 Oct 2012
Move rootx=m to the last line of the function.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by