MatLab で二分アルゴリズムのコードを作成しました。これは、教科書に記載されている疑似コードに基づいています。これまでのところ、アルゴリズムはすべての問題で問題なく機能しましたが、間隔 [1,2] で f(x) = x - tan(x) の根を見つけるように求められたとき、いくつか問題が発生しました。私のコードは次のとおりです。
function x = bisection(a,b,M)
f = @(x) x - tan(x);
u = f(a);
v = f(b);
e = b-a;
x = [a, b, u, v]
if (u > 0 && v > 0) || (u < 0 && v < 0)
return;
end;
for k = 1:M
e = e/2;
c = a + e;
w = f(c);
x = [k, c, w, e]
if (abs(e) < 10^(-5) || abs(w) < eps)
return;
end
if (w < 0 && u > 0) || (w > 0 && u < 0)
b = c;
v = w;
else
a = c;
u = w;
end
end
このアルゴリズムを間隔 [1,2] で、たとえば 15 回の反復で実行すると、最終的な答えは次のようになります。
x =
1.0e+004 *
0.0015 0.0002 -3.8367 0.0000
f(c) = 0 (上記のベクトルの 3 番目のエントリ) を取得したいので、これは明らかに外れています。
誰かが私の結果を改善する方法について助けやヒントをくれれば、とても感謝しています. 私はMatLabに非常に慣れていないので、初心者として扱ってください:)。