function [x,xN] = bisect(f,x0,N,tol)
% x0有解区间
% 精度,浮点数最小值
if nargin<4
tol=eps;
end
% N 迭代次数
if nargin<3
N=17;
end
% 有解必要条件 x0(1)*x0(2)>0 , 否则 无解,报错,退出程序
if sign(f(x0(1)))*sign(f(x0(2)))>0
error('The condition f(a)f(b)<=0 is not satisfied!')
end
% x 中点值
x=sum(x0)/2;
% xN 记录每次迭代区间的中点值
xN=zeros(1,N);
xN(1)=x;
% 迭代次数从2开始
for k=2:N
% 中点取值为 0 ,找到零点,传给函数输出x
if f(x)==0
break
end
%判断区间除2是否满足容差条件
if (x0(2)-x0(1))/2>tol
% 大于容差 更新左右端点
if sign(f(x0(1)))*sign(f(x))>0
x0(1)=x;
else
x0(2)=x;
end
x=sum(x0)/2;
% 记录迭代值
xN(k)=x;
% 小于容差 退出
else
break
end
end
end
bisect
最新推荐文章于 2021-09-24 12:42:55 发布