在找到每个根之前进行了多少次递归?还有哪些是根源?
这是我的代码:
e=0.000001;
f1=@(x) 14.*x.*exp(x-2)-12.*exp(x-2)-7.*x.^3+20.*x.^2-26.*x+12;
a=0;
c=3;
while abs(c-a)>e
b=(c+a)/2;
if f1(a)*f1(b)<0
c=b;
else
a=b;
end
disp(b);
end
答案 0 :(得分:5)
Bisection通过获取某个初始间隔[a,b]
的端点并查找间隔的哪一半必须包含根(它评估中点,并确定哪一半有符号更改)来工作。然后二分法在已识别的一半上重复该过程。
Bisection仅收集一个可能的根,如果您的函数在[a,b]
内有多个根,则很难预测它将汇聚到哪个特定的根。 (注意:由于二分是一个完全确定的算法,如果给它相同的初始间隔,它将总是收敛到完全相同的根。)迭代只是简化找到的根的近似,它们找不到多个根。
要直接回答你的问题,bisection 将不会在[0,3]
内发现你函数的所有三个根。它只会找到一个根,这可以通过二分代码的最后一次迭代来识别。二分迭代输出的所有值只显示算法对最终找到的一个根所做的进展(这些值应该是收敛于最终值的序列)。
答案 1 :(得分:1)
二分法的算法是只能在定义的间隔之间找到一个根。在您的问题中,无法找到所有三个根,但如果您定义不同的间隔以找出各个根,您可能会成功。您可以查看具有完整理论背景和示例的bisection method in Matlab示例程序。