二分法(数值分析)

时间:2012-11-08 17:36:05

标签: matlab analysis numerical newtons-method bisection

在找到每个根之前进行了多少次递归?还有哪些是根源?


这是我的代码:

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

2 个答案:

答案 0 :(得分:5)

Bisection通过获取某个初始间隔[a,b]的端点并查找间隔的哪一半必须包含根(它评估中点,并确定哪一半有符号更改)来工作。然后二分法在已识别的一半上重复该过程。

Bisection仅收集一个可能的根,如果您的函数在[a,b]内有多个根,则很难预测它将汇聚到哪个特定的根。 (注意:由于二分是一个完全确定的算法,如果给它相同的初始间隔,它将总是收敛到完全相同的根。)迭代只是简化找到的根的近似,它们找不到多个根。

要直接回答你的问题,bisection 将不会[0,3]内发现你函数的所有三个根。它只会找到一个根,这可以通过二分代码的最后一次迭代来识别。二分迭代输出的所有值只显示算法对最终找到的一个根所做的进展(这些值应该是收敛于最终值的序列)。

答案 1 :(得分:1)

二分法的算法是只能在定义的间隔之间找到一个根。在您的问题中,无法找到所有三个根,但如果您定义不同的间隔以找出各个根,您可能会成功。您可以查看具有完整理论背景和示例的bisection method in Matlab示例程序。