What's wrong with my bisection method function???

4 ビュー (過去 30 日間)
Joe
Joe 2013 年 4 月 11 日
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 件のコメント
Matt J
Matt J 2013 年 4 月 11 日
編集済み: Matt J 2013 年 4 月 11 日
Show us what error you're getting and how to reproduce it.
Joe
Joe 2013 年 4 月 12 日
The error "Output argument 'root' not assigned during call..." shows up. I've already checked for the possible causes of this error and none seem to fit. When I alter my code so that it should produce an error when I run it, it does in fact produce that error instead of the output argument error.

サインインしてコメントする。

回答 (1 件)

Roger Stafford
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.

カテゴリ

Help Center および File ExchangePerformance and Memory についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by