Метод Мюллера в Matlab не находит сложных корней - PullRequest
1 голос
/ 18 декабря 2011

Моя проблема в том, что мой алгоритм метода Мюллера в Matlab не находит сложные корни только реальными.Неважно, какую точку я выберу.Мой алгоритм только находит -1,9713 в диапазоне [-2, 0] и 1,4660 в диапазоне [1 2] после использования функции корней. Я знаю, что корни:

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 Ответ

1 голос
/ 19 декабря 2011

Я понял это. В этом фрагменте кода:

%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))

и алгоритм теперь работает правильно

...