Cómo encontrar todas las raíces de una ecuación en Python

de numpy import exp, pi
de scipy.special import lambertw
c = 3
alambda = 1.234
rho = 0.8
b = rho * c / alambda
def f (zeta):
y = ((zeta ** c) * (exp ((alambda * b) * (1-zeta)))) – 1
volver y
raíz raíz zeta (k, n):
a = alambda
return -c / (a ​​* b) * lambertw (-a * b / c * exp (- (a * b + 2j * pi * n) / c), k = k)
para k en el rango (-20, 20):
# también n puede ser cualquier número entero; probablemente reproduce el mismo conjunto raíz
# como k variable
zeta = raíz zeta (k, 3)
print (“k = {0}, zeta = {1}, error = {2}”. format (k, zeta, abs (f (zeta))))

La ecuación tiene un número infinito de raíces de valores complejos. Las raíces k=0 y k=-1 que corresponden a ramas reales de la función Lambert W pueden tener un valor real.

Para los no enteros c la situación parece un poco más complicada debido al corte de rama adicional, aunque al menos las raíces positivas con valor real deben ser capturadas.