Theory

The goal of cxroots is to compute the distinct roots \(\{z_i\}_{i=1}^n\) and corresponding multiplicities \(\{m_i\}\) of the given function \(f(z)\) within the given contour \(C\). cxroots starts by computing the total number of roots (counting multiplicities) \(N\) within \(C\). If \(N>M\), where \(M\) is supplied by the user, then the contour is subdivided until a set of contours is obtained where the number of roots within each one is \(\leq M\).

The roots within each of these contours are approximated using the method of Kravanja and Van Barel [KVanBarel00] which involves calculating integrals of the form

\[\frac{1}{2\pi i} \int_C \phi(z)\psi(z) \frac{f'(z)}{f(z)} dz = \sum_{i=1}^n m_i \phi(z_i) \psi(z_i)\]

where \(\phi\), \(\psi\) are formal orthogonal polynomials. If \(f'(z)\) is not provided by the user then it is instead approximated using a finite difference method. These roots are then refined using the Newton-Raphson method if \(f'(z)\) is provided and Muller’s method otherwise.

References

[KVanBarel00]

P. Kravanja and M. Van Barel. Computing the Zeros of Analytic Functions. Springer, Berlin, Heidelberg, 2000. ISBN 978-3-540-67162-6. doi:10.1007/BFb0103927.