How to chose parameters for implementing a root bound in code

30 Views Asked by At

I am trying to implement Fujiwara's bound for the roots of a complex polynomial in Python. It states that the maximum absolute value of the roots of a polynomial $f(z) = a_n z^n + \cdots + a_0$ is no larger than $$ |z| \leq \max \left| \frac{1}{\lambda_j}\frac{a_{n-j}}{a_n}\right|^{\frac{1}{j}}, $$ where $\lambda_j$ are positive numbers that satistify $\sum_j \lambda_j = 1$.

Obviously, the choice of the $\lambda_j$ will have an impact on the sharpness of the bound. So far I have been using the Dirichlet distribution (in numpy) to generate random $\lambda_j$ that sum up to one, but the results have been rather poor. My intuition would be to assign a larger $\lambda$ to a term for which $\left|\frac{a_{n-j}}{a_n}\right|^{\frac{1}{j}}$ becomes large, but I am not sure how to go about this systematically.

I am looking for advice on how to chose these parameters, either from a mathematical or from a coding perspective. Thank you!