lebedev_rule#
- scipy.integrate.lebedev_rule(n)[источник]#
Квадратура Лебедева.
Вычисление точек выборки и весов для квадратуры Лебедева [1] для интегрирования функции по поверхности единичной сферы.
- Параметры:
- nint
Порядок квадратуры. См. Notes для поддерживаемых значений.
- Возвращает:
- xndarray формы
(3, m) Точки выборки на единичной сфере в декартовых координатах.
mэто «степень», соответствующая указанному порядку; см. Примечания.- wndarray формы
(m,) Веса
- xndarray формы
Примечания
Реализовано путём перевода кода Matlab из [2] в Python.
Доступные порядки (аргумент n) являются:
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
Соответствующие степени
mявляются: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
Ссылки
[1]В.И. Лебедев и Д.Н. Лайков. «Квадратурная формула для сферы 131-го алгебраического порядка точности». Доклады математики, Том 59, № 3, 1999, стр. 477-481.
[2]R. Parrish.
getLebedevSphere. Matlab Central File Exchange. https://www.mathworks.com/matlabcentral/fileexchange/27097-getlebedevsphere.[3]Bellet, Jean-Baptiste, Matthieu Brachet, and Jean-Pierre Croisille. “Quadrature and symmetry on the Cubed Sphere.” Journal of Computational and Applied Mathematics 409 (2022): 114142. DOI:10.1016/j.cam.2022.114142.
Примеры
Пример, приведённый в [3] является интегрированием \(f(x, y, z) = \exp(x)\) по сфере радиуса \(1\); ссылка на это находится
14.7680137457653. Показать сходимость к ожидаемому результату по мере увеличения порядка:>>> 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()