Matlab中的Muller方法找不到复杂的根

时间:2011-12-18 11:30:51

标签: matlab numerical-methods

我的问题是我在Matlab中的Mullers方法算法并没有发现复杂的根只是真实的。我选择哪一点并不重要。使用根函数后,我的算法只在范围[-2,0]范围内找到-1.9713,在范围[1 2]中找到1.4660我知道根是:

roots([2 0.5 -5 2 -3])

ans =

    -1.9713          
    1.4660          
    0.1276 + 0.7090i
    0.1276 - 0.7090i

这是我的代码:

function [sol,sol2,i] = Muller2()
    min=-2;
    max=0;
    f=[2 0.5 -5 2 -3]
    x=min
for i=1:Inf
    %calculating coefficients of the quadratic equation
    a=polyval(polyder(polyder(f)), x)/2;
    b=polyval(polyder(f), x);
    c=polyval(f, x);

    %solving delta
    d=b^2-4*a*c;
    %calculating roots
    z1=-2*c/(b+sqrt(d));
    z2=-2*c/(b-sqrt(d));

    %choosing the closer root
    if(abs(polyval(f, z1))<=abs(polyval(f, z2)))
        x=x+z1;    
    else
        x=x+z2;
    end
    sol2(i)=x
    if(abs(polyval(f,x))<=20*eps)
        break;
    end
end

sol=x

1 个答案:

答案 0 :(得分:1)

我明白了。在这段代码中:

%choosing the closer root
    if(abs(polyval(f, z1))<=abs(polyval(f, z2)))
        x=x+z1;    
    else
        x=x+z2;
    end

我改变了这个:

if(abs(polyval(f, z1))<=abs(polyval(f, z2)))

到此:

if(abs(z1))<=abs(z2))

,算法现在正常工作