What's wrong with my bisection method function???
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
Roger Stafford
2013-4-12
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!