Find all the roots (zeros) of a complex analytic function within a given contour in the complex plane.
Project description
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()
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 withpre-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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9bb1f2dbf63e28a4dd081d0fb4d6dbb0d33effdb2df7e993c171f6d6a9fd24e |
|
MD5 | 840936e0cb7e219bd96cdf69d4b1ff49 |
|
BLAKE2b-256 | 7163510e0e0d1929a6e1c7920d7bf06eaec2b6da9ea7befdd3b5ebff94f01c6c |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2930d0327b0b908671e0ea713a61fc4f505fa61f627bb2f7d710841260e1f6c9 |
|
MD5 | a20b73102caef6d31fd6c47ae745fe8f |
|
BLAKE2b-256 | e7633e847cd9cc8222fae205f5c94b690643ac2b7bc3d55665dc7c7cd33b508f |