Encontrando Raízes

Encontrando Raízes#

import numpy as np
import matplotlib.pyplot as plt

Em muitos problemas numéricos, é comum precisarmos determinar o valor de uma variável que faça com que uma função se anule, ou seja, encontrar a raiz da função.

A biblioteca scipy.optimize contém vários métodos para encontrar raízes, entretanto a rotina brentq() oferece um método robusto e eficiente para encontrar raízes de uma função escalar.

Para utilizá-la, é necessário fornecer um intervalo no qual se sabe que a função muda de sinal, delimitando a região em que a raiz está localizada. O método então irá iterativamente refiná-la até atingir a solução com a precisão desejada.

Vamos considerar para ilustrar a rotina a função

\(f(x) = \frac{x e^x}{e^x - 1} - 5\)

import scipy.optimize as optimize
def f(x):
    return (x*np.exp(x)/(np.exp(x) - 1.0) - 5.0)
root, r = optimize.brentq(f, 0.1, 10.0, full_output=True)

print(root)
print(r.converged)
4.965114231744287
True
x = np.linspace(0.1, 10.0, 1000)
fig, ax = plt.subplots()
ax.plot(x, f(x))
ax.scatter(np.array([root]), np.array([f(root)]))
ax.grid()
../_images/74079e91afbf1524a9d5f9eb114326989a64fccf8ae4bc818ee753ca96ba09d7.png