我在 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 (上面向量中的第三个条目)。
如果有人可以就如何提高我的成绩给我任何帮助/提示,我将不胜感激。我对 MatLab 很陌生,所以把我当作新手:)。