0.1 Miscelânea — Enésima Raiz
1. Desenvolvimento do Método </p>
Para obtermos uma função que retorne a raiz arbitrária de um número qualquer , podemos supor que é uma constante que se relacione com o parâmetro de entrada da seguinte forma:
$$ x^n = \phi $$
onde é um inteiro qualquer e é um valor real positivo, isto é:
$$\phi > 0 $$
Através desta expressão, vamos supor uma função tal que
$$ f(x) = x^n – \phi $$
A função possui algumas propriedades interessantes. A primeira delas é que sabemos que sempre, pois a Equação 1 é verdadeira. Além disso, pode ser facilmente derivada:
$$ \dfrac{d}{dx}f(x) = nx^{n-1} $$
Desta forma, o problema de retirar a raiz de se reduz a um problema de busca do zero da função . Como temos e sua derivada, podemos utilizar o Método de Newton para encontrarmos esta raiz:
$$ x_{k+1} = x_k – \dfrac{f(x)}{\frac{d}{dx}f(x)} $$
Assim,
$$x_{k+1} = x_k – \dfrac{x_k^n – \phi}{nx_k^{n-1} $$ \\
$$x_{k+1} = x_k – \dfrac{x_k}{n} + \dfrac{\phi}{x_k^{n-1} $$
Simplificando a última equação, obtemos o algoritmo da enésima raiz:
$$ x_{k+1} = \dfrac{1}{n} \left[ (n-1)x_k + \dfrac{\phi}{x_k^{n-1} \right] $$
2. Implementação
def nth_root(x, n, errto = 1E-5):
"""
Return the nth-root of a number.
nth_root(x, n, errto = 1E-5)
* x: Float value
* n: nth-root
* errto: tolerated aproximation error (default: 1E-5)
Author: Pedro Garcia [sawp@sawp.com.br]
see: http://www.sawp.com.br
License: Creative Commons
http://creativecommons.org/licenses/by-nc-nd/2.5/br/
Marc 2010
"""
n = int(n)
x = float(x)
zold = x/2.0
errno = errto + 1
while errno > errto:
znew = (1.0/n) * ((n-1)*zold + x/zold**(n-1))
if zold != 0:
errno = abs(znew - zold)/abs(znew)
else:
break
zold = znew
return znew
Disponível para download em http://www.sawp.com.br/code/misc/nth_root.py </p> </p>
3. Copyright
Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.