逐步搜索法的原理:
从区间[a,b]的左端点a出发,按选定的步长h一步步向右搜索,若:
,
则区间[a+jh,a+(j+1)h]内必有根。搜索过程也可以从b开始,这时应取步长h<0。
本文编程思路是构建一个searchInterval函数,输入左端点a,右端点b,步长h。输出隔根区间。
文件searchInterval.m:
function [interval] = searchInterval(a,b,h)
interval = [];
for j = 0:floor((b-a)/h)
x = a+j*h;
if f(x)*f(x+h) < 0
a0 = x;
b0 = x+h;
interval(end+1) = [a0];
interval(end+1) = [b0];
end
end
文件f.m:
function y = f(x)
y = x^2-5*x+1;
% 函数仅为算例
比如输入命令searchInterval(-100,100,0.0001),可得到输出结果为:
0.2087 0.2088 4.7912 4.7913
意即在[-100,100]之间,在步长0.0001下有两个隔根区间,一个是[0.2087,0.2088],一个是[4.7912,4.7913]。
显然,可以在先大范围、低精度(a,b之间距离大,步长h小)缩小隔根区间范围,再在缩小后的范围内利用更小的步长h得到高精度隔根区间。实际上,此法也可以求函数的近似零点。