Skip to main content

Find all the roots (zeros) of a complex analytic function within a given contour in the complex plane.

Project description

pkg_img doi tests coverage sonarcloud

cxroots

cxroots is a Python package for finding all the roots of a function, f(z), of a single complex variable within a given contour, C, in the complex plane. It requires only that both:

  • f(z) has no roots or poles on C

  • f(z) is analytic in the interior of C

The implementation is primarily based on [KB] and evaluates contour integrals involving f(z) and its derivative f’(z) to determine the roots. If f’(z) is not provided then it is approximated using a finite difference method. The roots are further refined using Newton-Raphson if f’(z) is given or Muller’s method if not. See the documentation for a more details and a tutorial.

With Python installed you can install cxroots by entering in the terminal/command line

pip install cxroots

Example

from numpy import exp, cos, sin
f = lambda z: (exp(2*z)*cos(z)-1-sin(z)+z**5)*(z*(z+2))**2

from cxroots import Circle
C = Circle(0,3)
roots = C.roots(f)
roots.show()
https://github.com/rparini/cxroots/blob/master/README_resources/readme_example.png?raw=true
print(roots)
 Multiplicity |               Root
------------------------------------------------
      2       | -2.000000000000 +0.000000000000i
      1       | -0.651114070264 -0.390425719088i
      1       | -0.651114070264 +0.390425719088i
      3       |  0.000000000000 +0.000000000000i
      1       |  0.648578080954 -1.356622683988i
      1       |  0.648578080954 +1.356622683988i
      1       |  2.237557782467 +0.000000000000i

See also

The Fortran 90 package ZEAL is a direct implementation of [KB].

Citing cxroots

R. Parini. cxroots: A Python module to find all the roots of a complex analytic function within a given contour (2018), https://github.com/rparini/cxroots https://doi.org/10.5281/zenodo.7013117

BibTex:

@misc{cxroots,
  author = {Robert Parini},
  title = {{cxroots: A Python module to find all the roots of a complex analytic function within a given contour}},
  doi = {10.5281/zenodo.7013116},
  url = {https://github.com/rparini/cxroots},
  year = {2018}
}

Development

  • Install the pre-commit and then run pre-commit install. The pre-commit scripts can also be run manually with pre-commit run --all-files

  • The project uses ruff for formatting and linting. It is run as part of the pre-commit hook and is recommended to be run on save in the developer’s editor.

Release Procedure

Making a release on GitHub with the tag vX.Y.Z will update the documentation on master and push cxroots at the tagged commit to PyPI.

The documentation can be manually generated by running ./create_docs in the docs_src directory.

References

[KB] (1,2)

P. Kravanja and M. Van Barel. Computing the Zeros of Analytic Functions. Springer, Berlin, Heidelberg, 2000.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cxroots-3.0.2.tar.gz (40.0 kB view details)

Uploaded Source

Built Distribution

cxroots-3.0.2-py3-none-any.whl (52.0 kB view details)

Uploaded Python 3

File details

Details for the file cxroots-3.0.2.tar.gz.

File metadata

  • Download URL: cxroots-3.0.2.tar.gz
  • Upload date:
  • Size: 40.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for cxroots-3.0.2.tar.gz
Algorithm Hash digest
SHA256 e9bb1f2dbf63e28a4dd081d0fb4d6dbb0d33effdb2df7e993c171f6d6a9fd24e
MD5 840936e0cb7e219bd96cdf69d4b1ff49
BLAKE2b-256 7163510e0e0d1929a6e1c7920d7bf06eaec2b6da9ea7befdd3b5ebff94f01c6c

See more details on using hashes here.

File details

Details for the file cxroots-3.0.2-py3-none-any.whl.

File metadata

  • Download URL: cxroots-3.0.2-py3-none-any.whl
  • Upload date:
  • Size: 52.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for cxroots-3.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2930d0327b0b908671e0ea713a61fc4f505fa61f627bb2f7d710841260e1f6c9
MD5 a20b73102caef6d31fd6c47ae745fe8f
BLAKE2b-256 e7633e847cd9cc8222fae205f5c94b690643ac2b7bc3d55665dc7c7cd33b508f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page