二分法(数值分析)

1 matlab numerical analysis 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
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

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