{ } Raw JSON

bundles / scipy 1.17.1 / scipy / integrate / _lebedev / lebedev_rule

function

scipy.integrate._lebedev:lebedev_rule

source: /scipy/integrate/_lebedev.py :5360

Signature

def   lebedev_rule ( n )

Summary

Lebedev quadrature.

Extended Summary

Compute the sample points and weights for Lebedev quadrature [1] for integration of a function over the surface of a unit sphere.

Parameters

n : int

Quadrature order. See Notes for supported values.

Returns

x : ndarray of shape ``(3, m)``

Sample points on the unit sphere in Cartesian coordinates. m is the "degree" corresponding with the specified order; see Notes.

w : ndarray of shape ``(m,)``

Weights

Notes

Implemented by translating the Matlab code of [2] to Python.

The available orders (argument n) are

3, 5, 7, 9, 11, 13, 15, 17,
19, 21, 23, 25, 27, 29, 31, 35,
41, 47, 53, 59, 65, 71, 77, 83,
89, 95, 101, 107, 113, 119, 125, 131

The corresponding degrees m are

6, 14, 26, 38, 50, 74, 86, 110,
146, 170, 194, 230, 266, 302, 350, 434,
590, 770, 974, 1202, 1454, 1730, 2030, 2354,
2702, 3074, 3470, 3890, 4334, 4802, 5294, 5810

Array API Standard Support

lebedev_rule has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable SCIPY_ARRAY_API=1 and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

====================  ====================  ====================
Library               CPU                   GPU
====================  ====================  ====================
NumPy                 ✅                     n/a                 
CuPy                  n/a                   ⛔                   
PyTorch               ⛔                     ⛔                   
JAX                   ⛔                     ⛔                   
Dask                  ⛔                     n/a                 
====================  ====================  ====================

See dev-arrayapi for more information.

Examples

An example given in [3]_ is integration of :math:`f(x, y, z) = \exp(x)` over a sphere of radius :math:`1`; the reference there is ``14.7680137457653``. Show the convergence to the expected result as the order increases:
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import lebedev_rule
def f(x):
    return np.exp(x[0])
res = []
orders = np.arange(3, 20, 2)
for n in orders:
    x, w = lebedev_rule(n)
    res.append(w @ f(x))
ref = np.full_like(res, 14.7680137457653)
err = abs(res - ref)/abs(ref)
plt.semilogy(orders, err)
plt.xlabel('order $n$')
plt.ylabel('relative error')
plt.title(r'Convergence for $f(x, y, z) = \exp(x)$')
plt.show()
fig-10b2da0a9984c8c0.png

Aliases

  • scipy.integrate.lebedev_rule

Referenced by

This package