Code Monkey home page Code Monkey logo

cxrootsp3d's Introduction

pkg_img doi tests coverage

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.7013117},
  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:
    • Black to maintain consistent formatting. It is run as part of the pre-commit hook and is recommended to be run on save in the developer's editor.
    • isort to sensibly order import statements in Python files. It is also run as part of the pre-commit hook.

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.