bisect

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

猜你喜欢

转载自blog.csdn.net/weixin_48450741/article/details/112464831
今日推荐