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