Метод нахождения корня Ньютона в MATLAB: квадратичная и кубическая сходимость - PullRequest
0 голосов
/ 12 ноября 2018

Итак, у меня есть этот пример метода Ньютона для поиска корней с квадратичной сходимостью ниже.Требуется функция f, производная от f df, начальное предположение g и допуск tol.Он выводит # итераций для достижения n-го корня, оценки корня r и ошибки приближения ошибки.

function [it, r, err] = QuadraticN(f, df, g , tol)

   num_it = 20;
   it_max = num_it + 1;

   x(1)=(g + num_it)/2;   %set x at n = 1

    n = 1;
    r = 0; % root
    it = 0; % iteration #
    err =0; % error 

% n = 1
r(1) = x(1)-f(x(1))/df(x(1)); % root at n = 1
err(1) = abs(x(1)-g); % error at n = 1

% n > 1
while (min(abs(f(x(n))))) && (abs(x(n)-it_max)>tol) && (it < num_it)

     x(n+1)=x(n)-f(x(n))/df(x(n)); % quadratic method

     it_max=x(n); % reset counter
     r= x(n); % set root to current at n 

     err = f(x(n)); % set error to current
     it = n;  % keep track of iterations
     n=n+1;    % increment to next n

   end

end

В этом примере я пытаюсь реализовать вторую версию метода, использующего кубическую сходимостьв отличие от квадратичного, и это то, что у меня есть (это только часть функции, которая будет изменена на кубическую, она принимает те же входные данные с добавлением ddf = вторая производная):

 r(1) = x(1)-df(x(1))/ddf(x(1)) + (sqrt((df(x(1)))^2 - 
2*f(x(1))*ddf(x(1)))) / ddf(x(1)); 

err(1) = abs(x(1)-g); % error at n = 1

while (min(abs(ddf(x(n))))) && (abs(x(n)-it_max)>tol) && (it < num_it)

    cube = ((sqrt((df(x(n)))^2 - 2*f(x(n))*ddf(x(n)))) / ddf(x(n))); 

    first = x(n) - df(x(n))/ddf(x(n));
    first = real(first); % is this right?

    x(n+1) = first + (cube);

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% FIX THIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%% check when to do plus or minus
   if( first > 0)
        x(n+1)=x(n)-df(x(n))/ddf(x(n)) + cube; 
    else
        x(n+1)=x(n)-df(x(n))/ddf(x(n)) - cube;

   % end

Я не уверен, правильно ли я проверяю, когда использовать кубик +/-.Я знаю, что это будет зависеть от кратности, но я не уверен, если использовать в первую очередь (основной метод Ньютона).Он выводит некоторые корни правильно, но, например, для уравнения -x ^ 3 + 8 с начальным предположением 2 я получаю -9.85985274E-01.Теперь я не знаю, является ли это частью проблемы, описанной выше, или преобразование в реальное перед вычислением.Я также получаю отрицательные ошибки.Я проверяю так же, как я делал с квадратичной, но я не уверен, правильно ли это.

...