Skip to main content

tanh-sinh quadrature for Python

Project description

logo

PyPi Version PyPI pyversions GitHub stars PyPi downloads

Discord

The rather modern tanh-sinh quadrature is different from classical Gaussian integration methods in that it doesn't integrate any function exactly, not even polynomials of low degree. Its tremendous usefulness rather comes from the fact that a wide variety of functions, even seemingly difficult ones with (integrable) singularities, can be integrated with arbitrary precision.

Install with

pip install tanh-sinh

and use it like

import tanh_sinh
import numpy as np

val, error_estimate = tanh_sinh.integrate(
    lambda x: np.exp(x) * np.cos(x),
    # Optional: Specify the function with its first and second derivative for
    #           better error estimation
    # (
    #   lambda x: np.exp(x) * np.cos(x),
    #   lambda x: np.exp(x) * (np.cos(x) - np.sin(x)),
    #   lambda x: -2 * np.exp(x) * np.sin(x),
    # )
    0,
    np.pi / 2,
    1.0e-14,
)

If you want more digits, use mpmath for arbitrary precision arithmetic:

import tanh_sinh
from mpmath import mp
import sympy

mp.dps = 50

val, error_estimate = tanh_sinh.integrate(
    lambda x: mp.exp(x) * sympy.cos(x),
    0,
    mp.pi / 2,
    1.0e-50,  # !
    mode="mpmath",
)

If the function has a singularity at a boundary, it needs to be shifted such that the singularity is at 0. (This is to avoid round-off errors for points that are very close to the singularity.) If there are singularities at both ends, the function can be shifted both ways and be handed off to integrate_lr; For example, for the function 1 / sqrt(1 - x**2), this gives

import numpy
import tanh_sinh

# def f(x):
#    return 1 / numpy.sqrt(1 - x ** 2)

val, error_estimate = tanh_sinh.integrate_lr(
    lambda x: 1 / numpy.sqrt(-(x**2) + 2 * x),  # = 1 / sqrt(1 - (x-1)**2)
    lambda x: 1 / numpy.sqrt(-(x**2) + 2 * x),  # = 1 / sqrt(1 - (-(x-1))**2)
    2,  # length of the interval
    1.0e-10,
)
print(numpy.pi)
print(val)
3.141592653589793
3.1415926533203944

Relevant publications

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tanh_sinh-0.3.21-cp314-none-any.whl (22.4 kB view details)

Uploaded CPython 3.14

tanh_sinh-0.3.21-cp313-none-any.whl (21.0 kB view details)

Uploaded CPython 3.13

tanh_sinh-0.3.21-cp312-none-any.whl (20.9 kB view details)

Uploaded CPython 3.12

tanh_sinh-0.3.21-cp311-none-any.whl (23.4 kB view details)

Uploaded CPython 3.11

tanh_sinh-0.3.21-cp310-none-any.whl (14.3 kB view details)

Uploaded CPython 3.10

File details

Details for the file tanh_sinh-0.3.21-cp314-none-any.whl.

File metadata

  • Download URL: tanh_sinh-0.3.21-cp314-none-any.whl
  • Upload date:
  • Size: 22.4 kB
  • Tags: CPython 3.14
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tanh_sinh-0.3.21-cp314-none-any.whl
Algorithm Hash digest
SHA256 bdd0fdb9573735bed20737fee37042c97cc89d2589727cce3bc8fd8ce301df5c
MD5 f26ca68a314e5621a14a0143dc7ab185
BLAKE2b-256 2b6cbdae048c33f5e9e3862f63c4aa4834cf92d25d11a1378dab0a721bab1e0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tanh_sinh-0.3.21-cp314-none-any.whl:

Publisher: release.yml on sigma-py/tanh-sinh-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tanh_sinh-0.3.21-cp313-none-any.whl.

File metadata

  • Download URL: tanh_sinh-0.3.21-cp313-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: CPython 3.13
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tanh_sinh-0.3.21-cp313-none-any.whl
Algorithm Hash digest
SHA256 79b9b0608b047e37e8645848f63c1c270429aa1167b6b2429d4c980150b513fb
MD5 fafe324653ffa3662449cf9026425487
BLAKE2b-256 6c7c68fd025caf397cb95121fa350de6e7e89ba155b0cb9b36b0ce0dd4cd37e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tanh_sinh-0.3.21-cp313-none-any.whl:

Publisher: release.yml on sigma-py/tanh-sinh-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tanh_sinh-0.3.21-cp312-none-any.whl.

File metadata

  • Download URL: tanh_sinh-0.3.21-cp312-none-any.whl
  • Upload date:
  • Size: 20.9 kB
  • Tags: CPython 3.12
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tanh_sinh-0.3.21-cp312-none-any.whl
Algorithm Hash digest
SHA256 2fd853410bad93e86113126b9d8c938aa7588dc0f2abd5cff32f02e94cdcaea9
MD5 1029274f17b50e6dc31b19962452a887
BLAKE2b-256 52b8ae225f6a4f13a51d076ba5c52356794df605656353706899c6705897ff09

See more details on using hashes here.

Provenance

The following attestation bundles were made for tanh_sinh-0.3.21-cp312-none-any.whl:

Publisher: release.yml on sigma-py/tanh-sinh-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tanh_sinh-0.3.21-cp311-none-any.whl.

File metadata

  • Download URL: tanh_sinh-0.3.21-cp311-none-any.whl
  • Upload date:
  • Size: 23.4 kB
  • Tags: CPython 3.11
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tanh_sinh-0.3.21-cp311-none-any.whl
Algorithm Hash digest
SHA256 8261e6552cf8cc0258118f7d3289d5e5ffd598e55224003700baf70c6ccf3f3a
MD5 d7db4241a5be912ba8e82ece5eacc4b2
BLAKE2b-256 da7867f74b693a0e702a38e765c4df035fd1005bb5699d150ad21256fd835039

See more details on using hashes here.

Provenance

The following attestation bundles were made for tanh_sinh-0.3.21-cp311-none-any.whl:

Publisher: release.yml on sigma-py/tanh-sinh-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tanh_sinh-0.3.21-cp310-none-any.whl.

File metadata

  • Download URL: tanh_sinh-0.3.21-cp310-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: CPython 3.10
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tanh_sinh-0.3.21-cp310-none-any.whl
Algorithm Hash digest
SHA256 55aa7f41516d4dafa0a6cc89d7716b4f153e477fa2a92abbcec24934f4b1031d
MD5 e6e9f390b12607f9dbed0835375457e6
BLAKE2b-256 640e655a018ca92c78f3bcb9273984225d9677bca6f03f2d31c9bdbe52fb1209

See more details on using hashes here.

Provenance

The following attestation bundles were made for tanh_sinh-0.3.21-cp310-none-any.whl:

Publisher: release.yml on sigma-py/tanh-sinh-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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