我在MATLAB中实现二分法时遇到了麻烦。
我必须为我的作业评估x-tan(x) = 0
。当我评估间隔[-1,1]时,我得到0,这是正确的,但我无法得到下一个根(约4.4934)。我已经尝试了其他似乎正确评估的函数以及产生相同结果的其他实现(1.5708)。这让我相信f=@(x) x-tan(x)
无法正常运作。
我的二分法方法是:
function root = bisection(a,b,max_tol, max_iter)
%set function handle here%
f = @(x) (x-tan(x));
if(f(a)*f(b) > 0)
disp ('reconfigure endpoints');
return;
end
iter = 1;
while(iter <= max_iter)
mid = (b+a)/2;
if (f(mid) == 0 || (b-a)/2 < max_tol)
disp('Iterations: ');
disp(iter);
root = mid;
return;
end
iter = iter + 1;
if(sign(f(mid)) == sign(f(a)))
a = mid;
else
b = mid;
end
end
end
我一直在关注的一个有趣的事情是我的预期功能情节。它是使用x=[-10:.01:10]; y=f(x); plot(x,y);