Função para Cálculo pelo Método Newton Raphson Polinômio para Gretl - Blog do Estudante de Atuariais

sexta-feira, 5 de abril de 2019

Função para Cálculo pelo Método Newton Raphson Polinômio para Gretl


function [x,k,info]=newton_raphson_polinomio(a,x_0,kmax,eps,del)
    // [x,k,info]=newton_raphson_polinomio(a,x_0,kmax,eps,del)
    // Calcula uma aproximação para uma das raízes do polinômio p(x) cujos coeficientes
    // encontram-se no vetor "a"=[a_0,a_1,...,a_n], usando o método de Newton-Raphson,
    // com estimativa inicial x_0, sujeita a |p(x)|<eps, desde que não exceda a "kmax" iterações.
    // Os coeficientes devem ser armazenados em "a" na ordem a_0, a_1, ...   
    // Se info=0, localizou uma raiz; se info=-1, a derivada numérica é quase nula na iteração "k";
    // se info=-2, |x_k-x_(k-1)|<del, mas |f(x)|>=eps;
    // se info=-3, o número máximo de iterações foi excedido.
    // (C) Rudnei Dias da Cunha 2009
    info = 0;
    quase_zero = sqrt(number_properties("eps"));
    x = x_0;
    for k=1:kmax
        [f_x,df_x]=avalia_horner2(a,x);
        if (abs(df_x)<quase_zero) then
            info = -1;
            break
        elseif (abs(f_x)<eps)
            info = 0;
            break
        else
            x_anterior = x;
            x = x-f_x/df_x;
            mprintf('k=%g x=%g f(x)=%g derivada(x)=%g\n',k,x,f_x,df_x);
            if (abs(x-x_anterior)<del)
                info = -2;
                break
            end
        end
    end
    if (k>=kmax) then
        info = -3
    end
endfunction

Nenhum comentário:

Postar um comentário