What's wrong with my bisection method function???
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I'm not quite sure what's exactly wrong with my bisection method function that I have written. Can someone please help me figure out what the error is?
function root = bisectIter(f,a,b,tol)
if sign(f(a))==sign(f(b))
error('a and b do not bracket the root');
end
k = 1;
x(k) = (a+b)/2;
while ((k<=tol)&&((b-a)/2)>= tol)
if f(x(k)) == 0
error('bisection condition didnt apply')
end
if (f(x(k))*f(a))<0
b = x(k);
else
a = x(k);
end
k = k + 1;
x(k) = (a+b)/2;
root = x(k);
end
end
2 commentaires
Réponses (1)
Roger Stafford
le 12 Avr 2013
In the 'while' condition "((k<=tol)&&((b-a)/2)>= tol)" presumably you have set 'tol' to some very small number to allow a and b to approach each other closely. That means the "k<=tol" part will fail at the very beginning and you will never enter the while-loop. That is why the 'root' argument is never assigned.
In my opinion your 'while' criterion should be based on how close to zero the f function gets instead of the width b-a or the number of trips through the loop.
Also the "f(x(k)) == 0" condition that produces an error message is rather self-defeating. This is the very condition you are striving for, namely to find a root.
0 commentaires
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!