Skip to main content

Multidimensional volumes and monomial integrals

Project description

ndim

Multidimensional volumes and monomial integrals.

PyPi Version PyPI pyversions GitHub stars Downloads

Discord

ndim computes all kinds of volumes and integrals of monomials over such volumes in a fast, numerically stable way, using recurrence relations.

Installation

Install ndim from PyPI with

pip install ndim

How to get a license

Licenses for personal and academic use can be purchased here. You'll receive a confirmation email with a license key. Install the key with

slim install <your-license-key>

on your machine and you're good to go.

For commercial use, please contact support@mondaytech.com.

Use ndim

import ndim

val = ndim.nball.volume(17)
print(val)

val = ndim.nball.integrate_monomial((4, 10, 6, 0, 2), lmbda=-0.5)
print(val)

# or nsphere, enr, enr2, ncube, nsimplex
0.14098110691713894
1.0339122278806983e-07

All functions have the symbolic argument; if set to True, computations are performed symbolically.

import ndim

vol = ndim.nball.volume(17, symbolic=True)
print(vol)
512*pi**8/34459425

The formulas

A PDF version of the text can be found here.

This note gives closed formulas and recurrence expressions for many $n$-dimensional volumes and monomial integrals. The recurrence expressions are often much simpler, more instructive, and better suited for numerical computation.

n-dimensional unit cube

C_n = \left\{(x_1,\dots,x_n): -1 \le x_i \le 1\right\}
  • Volume.
|C_n| = 2^n = \begin{cases}
  1&\text{if $n=0$}\\
  |C_{n-1}| \times 2&\text{otherwise}
\end{cases}
  • Monomial integration.
\begin{align}
  I_{k_1,\dots,k_n}
  &= \int_{C_n} x_1^{k_1}\cdots x_n^{k_n}\\
    &= \prod_i \frac{1 + (-1)^{k_i}}{k_i+1}
  =\begin{cases}
    0&\text{if any $k_i$ is odd}\\
    |C_n|&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0}-1}{k_{i_0}+1}&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

n-dimensional unit simplex

 T_n = \left\{(x_1,\dots,x_n):x_i \geq 0, \sum_{i=1}^n x_i \leq 1\right\}
  • Volume.
|T_n| = \frac{1}{n!} = \begin{cases}
  1&\text{if $n=0$}\\
  |T_{n-1}| \times \frac{1}{n}&\text{otherwise}
\end{cases}
  • Monomial integration.
\begin{align}
  I_{k_1,\dots,k_n}
  &= \int_{T_n} x_1^{k_1}\cdots x_n^{k_n}\\
  &= \frac{\prod_i\Gamma(k_i + 1)}{\Gamma\left(n + 1 + \sum_i k_i\right)}\\
  &=\begin{cases}
    |T_n|&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-1,\dots,k_n} \times \frac{k_{i_0}}{n + \sum_i k_i}&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

Remark

Note that both numerator and denominator in the closed expression will assume very large values even for polynomials of moderate degree. This can lead to difficulties when evaluating the expression on a computer; the registers will overflow. A common countermeasure is to use the log-gamma function,

\frac{\prod_i\Gamma(k_i)}{\Gamma\left(\sum_i k_i\right)}
= \exp\left(\sum_i \ln\Gamma(k_i) - \ln\Gamma\left(\sum_i k_i\right)\right),

but a simpler and arguably more elegant solution is to use the recurrence. This holds true for all such expressions in this note.

n-dimensional unit sphere (surface)

U_n = \left\{(x_1,\dots,x_n): \sum_{i=1}^n x_i^2 = 1\right\}
  • Volume.
 |U_n|
 = \frac{n \sqrt{\pi}^n}{\Gamma(\frac{n}{2}+1)}
 = \begin{cases}
   2&\text{if $n = 1$}\\
   2\pi&\text{if $n = 2$}\\
   |U_{n-2}| \times \frac{2\pi}{n - 2}&\text{otherwise}
 \end{cases}
  • Monomial integral.
\begin{align*}
  I_{k_1,\dots,k_n}
  &= \int_{U_n} x_1^{k_1}\cdots x_n^{k_n}\\
  &= \frac{2\prod_i
    \Gamma\left(\frac{k_i+1}{2}\right)}{\Gamma\left(\sum_i \frac{k_i+1}{2}\right)}\\\\
  &=\begin{cases}
    0&\text{if any $k_i$ is odd}\\
    |U_n|&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0} - 1}{n - 2 + \sum_i k_i}&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align*}

n-dimensional unit ball

S_n = \left\{(x_1,\dots,x_n): \sum_{i=1}^n x_i^2 \le 1\right\}
  • Volume.

    |S_n|
    = \frac{\sqrt{\pi}^n}{\Gamma(\frac{n}{2}+1)}
    = \begin{cases}
       1&\text{if $n = 0$}\\
       2&\text{if $n = 1$}\\
       |S_{n-2}| \times \frac{2\pi}{n}&\text{otherwise}
    \end{cases}
    
  • Monomial integral.

\begin{align}
  I_{k_1,\dots,k_n}
  &= \int_{S_n} x_1^{k_1}\cdots x_n^{k_n}\\
  &= \frac{2^{n + p}}{n + p} |S_n|
  =\begin{cases}
    0&\text{if any $k_i$ is odd}\\
    |S_n|&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0} - 1}{n + p}&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

with $p=\sum_i k_i$.

n-dimensional unit ball with Gegenbauer weight

$\lambda > -1$.

  • Volume.
    \begin{align}
    |G_n^{\lambda}|
      &= \int_{S^n} \left(1 - \sum_i x_i^2\right)^\lambda\\
      &= \frac{%
        \Gamma(1+\lambda)\sqrt{\pi}^n
      }{%
        \Gamma\left(1+\lambda + \frac{n}{2}\right)
      }
      = \begin{cases}
        1&\text{for $n=0$}\\
        B\left(\lambda + 1, \frac{1}{2}\right)&\text{for $n=1$}\\
        |G_{n-2}^{\lambda}|\times \frac{2\pi}{2\lambda + n}&\text{otherwise}
      \end{cases}
  \end{align}
  • Monomial integration.
\begin{align}
  I_{k_1,\dots,k_n}
    &= \int_{S^n} x_1^{k_1}\cdots x_n^{k_n} \left(1 - \sum_i x_i^2\right)^\lambda\\
    &= \frac{%
      \Gamma(1+\lambda)\prod_i \Gamma\left(\frac{k_i+1}{2}\right)
    }{%
      \Gamma\left(1+\lambda + \sum_i \frac{k_i+1}{2}\right)
    }\\
    &= \begin{cases}
      0&\text{if any $k_i$ is odd}\\
      |G_n^{\lambda}|&\text{if all $k_i=0$}\\
      I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0}-1}{2\lambda + n + \sum_i k_i}&\text{if $k_{i_0} > 0$}
    \end{cases}
\end{align}

n-dimensional unit ball with Chebyshev-1 weight

Gegenbauer with $\lambda=-\frac{1}{2}$.

  • Volume.
\begin{align}
|G_n^{-1/2}|
  &= \int_{S^n} \frac{1}{\sqrt{1 - \sum_i x_i^2}}\\
  &= \frac{%
    \sqrt{\pi}^{n+1}
  }{%
    \Gamma\left(\frac{n+1}{2}\right)
  }
  =\begin{cases}
    1&\text{if $n=0$}\\
    \pi&\text{if $n=1$}\\
    |G_{n-2}^{-1/2}| \times \frac{2\pi}{n-1}&\text{otherwise}
  \end{cases}
\end{align}
  • Monomial integration.
\begin{align}
I_{k_1,\dots,k_n}
  &= \int_{S^n} \frac{x_1^{k_1}\cdots x_n^{k_n}}{\sqrt{1 - \sum_i x_i^2}}\\
  &= \frac{%
    \sqrt{\pi} \prod_i \Gamma\left(\frac{k_i+1}{2}\right)
  }{%
    \Gamma\left(\frac{1}{2} + \sum_i \frac{k_i+1}{2}\right)
  }\\
  &= \begin{cases}
    0&\text{if any $k_i$ is odd}\\
    |G_n^{-1/2}|&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0}-1}{n-1 + \sum_i k_i}&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

n-dimensional unit ball with Chebyshev-2 weight

Gegenbauer with $\lambda = +\frac{1}{2}$.

  • Volume.
\begin{align}
|G_n^{+1/2}|
  &= \int_{S^n} \sqrt{1 - \sum_i x_i^2}\\
  &= \frac{%
    \sqrt{\pi}^{n+1}
  }{%
    2\Gamma\left(\frac{n+3}{2}\right)
  }
  = \begin{cases}
    1&\text{if $n=0$}\\
    \frac{\pi}{2}&\text{if $n=1$}\\
    |G_{n-2}^{+1/2}| \times \frac{2\pi}{n+1}&\text{otherwise}
  \end{cases}
\end{align}
  • Monomial integration.
\begin{align}
I_{k_1,\dots,k_n}
  &= \int_{S^n} x_1^{k_1}\cdots x_n^{k_n} \sqrt{1 - \sum_i x_i^2}\\
  &= \frac{%
    \sqrt{\pi}\prod_i \Gamma\left(\frac{k_i+1}{2}\right)
  }{%
    2\Gamma\left(\frac{3}{2} + \sum_i \frac{k_i+1}{2}\right)
  }\\
  &= \begin{cases}
    0&\text{if any $k_i$ is odd}\\
    |G_n^{+1/2}|&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0}-1}{n + 1 + \sum_i k_i}&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

n-dimensional generalized Cauchy volume

As appearing in the Cauchy distribution and Student's t-distribution.

  • Volume. $2 \lambda > n$.
    \begin{align}
    |Y_n^{\lambda}|
      &= \int_{\mathbb{R}^n} \left(1 + \sum_i x_i^2\right)^{-\lambda}\\
      &= |U_{n-1}| \frac{1}{2} B(\lambda - \frac{n}{2}, \frac{n}{2})\\
      &= \begin{cases}
        1&\text{for $n=0$}\\
        B\left(\lambda - \frac{1}{2}, \frac{1}{2}\right)&\text{for $n=1$}\\
        |Y_{n-2}^{\lambda}|\times \frac{2\pi}{2\lambda - n}&\text{otherwise}
      \end{cases}
  \end{align}
  • Monomial integration. $2 \lambda > n + \sum_i k_i$.
\begin{align}
  I_{k_1,\dots,k_n}
    &= \int_{\mathbb{R}^n} x_1^{k_1}\cdots x_n^{k_n} \left(1 + \sum_i x_i^2\right)^{-\lambda}\\
    &= \frac{\Gamma(\frac{n+\sum k_i}{2}) \Gamma(\lambda - \frac{n - \sum k_i}{2})}{2 \Gamma(\lambda)}
       \times \frac{2\prod_i \Gamma(\tfrac{k_i+1}{2})}{\Gamma(\sum_i \tfrac{k_i+1}{2})}\\
    &= \begin{cases}
      0&\text{if any $k_i$ is odd}\\
      |Y_n^{\lambda}|&\text{if all $k_i=0$}\\
      I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0}-1}{2\lambda - \left(n + \sum_i k_i\right)}&\text{if $k_{i_0} > 0$}
    \end{cases}
\end{align}

n-dimensional generalized Laguerre volume

$\alpha > -1$.

  • Volume
\begin{align}
  V_n
    &= \int_{\mathbb{R}^n} \left(\sqrt{x_1^2+\cdots+x_n^2}\right)^\alpha \exp\left(-\sqrt{x_1^2+\dots+x_n^2}\right)\\
    &= \frac{2 \sqrt{\pi}^n \Gamma(n+\alpha)}{\Gamma(\frac{n}{2})}
  = \begin{cases}
    2\Gamma(1+\alpha)&\text{if $n=1$}\\
    2\pi\Gamma(2 + \alpha)&\text{if $n=2$}\\
    V_{n-2} \times \frac{2\pi(n+\alpha-1) (n+\alpha-2)}{n-2}&\text{otherwise}
  \end{cases}
\end{align}
  • Monomial integration.
  \begin{align}
  I_{k_1,\dots,k_n}
  &= \int_{\mathbb{R}^n} x_1^{k_1}\cdots x_n^{k_n}
    \left(\sqrt{x_1^2+\dots+x_n^2}\right)^\alpha \exp\left(-\sqrt{x_1^2+\dots+x_n^2}\right)\\
  &= \frac{%
    2 \Gamma\left(\alpha + n + \sum_i k_i\right)
    \left(\prod_i \Gamma\left(\frac{k_i + 1}{2}\right)\right)
  }{%
    \Gamma\left(\sum_i \frac{k_i + 1}{2}\right)
  }\\
  &=\begin{cases}
    0&\text{if any $k_i$ is odd}\\
    V_n&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\ldots,k_n} \times \frac{%
      (\alpha + n + p - 1) (\alpha + n + p - 2) (k_{i_0} - 1)
    }{%
        n + p - 2
    }&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

with $p=\sum_i k_i$.

n-dimensional Hermite (physicists')

  • Volume.
\begin{align}
  V_n
  &= \int_{\mathbb{R}^n} \exp\left(-(x_1^2+\cdots+x_n^2)\right)\\
  &= \sqrt{\pi}^n
   = \begin{cases}
     1&\text{if $n=0$}\\
     \sqrt{\pi}&\text{if $n=1$}\\
     V_{n-2} \times \pi&\text{otherwise}
   \end{cases}
\end{align}
  • Monomial integration.
\begin{align}
    I_{k_1,\dots,k_n}
    &= \int_{\mathbb{R}^n} x_1^{k_1}\cdots x_n^{k_n} \exp(-(x_1^2+\cdots+x_n^2))\\
    &= \prod_i \frac{(-1)^{k_i} + 1}{2} \times \Gamma\left(\frac{k_i+1}{2}\right)\\
    &=\begin{cases}
      0&\text{if any $k_i$ is odd}\\
      V_n&\text{if all $k_i=0$}\\
      I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times \frac{k_{i_0} - 1}{2}&\text{if $k_{i_0} > 0$}
    \end{cases}
\end{align}

n-dimensional Hermite (probabilists')

  • Volume.
V_n = \frac{1}{\sqrt{2\pi}^n} \int_{\mathbb{R}^n}
\exp\left(-\frac{1}{2}(x_1^2+\cdots+x_n^2)\right) = 1
  • Monomial integration.
\begin{align}
  I_{k_1,\dots,k_n}
    &= \frac{1}{\sqrt{2\pi}^n} \int_{\mathbb{R}^n} x_1^{k_1}\cdots x_n^{k_n}
    \exp\left(-\frac{1}{2}(x_1^2+\cdots+x_n^2)\right)\\
  &= \prod_i \frac{(-1)^{k_i} + 1}{2} \times
    \frac{2^{\frac{k_i+1}{2}}}{\sqrt{2\pi}} \Gamma\left(\frac{k_i+1}{2}\right)\\
  &=\begin{cases}
    0&\text{if any $k_i$ is odd}\\
    V_n&\text{if all $k_i=0$}\\
    I_{k_1,\dots,k_{i_0}-2,\dots,k_n} \times (k_{i_0} - 1)&\text{if $k_{i_0} > 0$}
  \end{cases}
\end{align}

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.

ndim-0.1.39-cp313-none-any.whl (37.8 kB view details)

Uploaded CPython 3.13

ndim-0.1.39-cp312-none-any.whl (37.7 kB view details)

Uploaded CPython 3.12

ndim-0.1.39-cp311-none-any.whl (40.8 kB view details)

Uploaded CPython 3.11

ndim-0.1.39-cp310-none-any.whl (29.8 kB view details)

Uploaded CPython 3.10

File details

Details for the file ndim-0.1.39-cp313-none-any.whl.

File metadata

  • Download URL: ndim-0.1.39-cp313-none-any.whl
  • Upload date:
  • Size: 37.8 kB
  • Tags: CPython 3.13
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ndim-0.1.39-cp313-none-any.whl
Algorithm Hash digest
SHA256 fc5c38a75e5ae7902719425d9fbf8779f0319e456d80eafdadb58988a315a7ce
MD5 3d5c42a105e87c14514f2cbc8681aae4
BLAKE2b-256 729c63629a700aa8601e71b6987fb6c82bdeeb3219cfdbd8b0f139d42fd086cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for ndim-0.1.39-cp313-none-any.whl:

Publisher: release.yml on sigma-py/ndim-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 ndim-0.1.39-cp312-none-any.whl.

File metadata

  • Download URL: ndim-0.1.39-cp312-none-any.whl
  • Upload date:
  • Size: 37.7 kB
  • Tags: CPython 3.12
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ndim-0.1.39-cp312-none-any.whl
Algorithm Hash digest
SHA256 9fb21f4192acf035ad9458ef82f7847d08223bf1f6e28ee3b1d43d4b9c9e3a0a
MD5 9861a33a87277fced59207d11772969c
BLAKE2b-256 384e8c91b570797ffa4e7e907bb56f42c7b7f6a63c7369fc8bc86a683877558a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ndim-0.1.39-cp312-none-any.whl:

Publisher: release.yml on sigma-py/ndim-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 ndim-0.1.39-cp311-none-any.whl.

File metadata

  • Download URL: ndim-0.1.39-cp311-none-any.whl
  • Upload date:
  • Size: 40.8 kB
  • Tags: CPython 3.11
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ndim-0.1.39-cp311-none-any.whl
Algorithm Hash digest
SHA256 e1f74bcdb9e94d4ded8509ac3e03285636a8e398f5f133f7aef859fcd067acd6
MD5 589b6e2da1b647da430d96a47a51d886
BLAKE2b-256 8a8580961f39730673d4ba8f9e3c020f5d50b59d7e77e5107a3df2b51f221f1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ndim-0.1.39-cp311-none-any.whl:

Publisher: release.yml on sigma-py/ndim-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 ndim-0.1.39-cp310-none-any.whl.

File metadata

  • Download URL: ndim-0.1.39-cp310-none-any.whl
  • Upload date:
  • Size: 29.8 kB
  • Tags: CPython 3.10
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ndim-0.1.39-cp310-none-any.whl
Algorithm Hash digest
SHA256 cf60c2993062ccfa776279b24dbf6a524d599841ec602cc7b2416f3925af1de3
MD5 ac4c25741a7185dcac7afa54a9ea5117
BLAKE2b-256 6b00cadcf4ec0bcac7e589467df50951b31d4523dc497f1026c38e1622be0760

See more details on using hashes here.

Provenance

The following attestation bundles were made for ndim-0.1.39-cp310-none-any.whl:

Publisher: release.yml on sigma-py/ndim-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