scipy.special.

ellip_harm#

scipy.special.ellip_harm(h2, k2, n, p, s, signm=1, signn=1)[источник]#

Эллипсоидальные гармонические функции E^p_n(l)

Они также известны как функции Ламе первого рода и являются решениями уравнения Ламе:

\[(s^2 - h^2)(s^2 - k^2)E''(s) + s(2s^2 - h^2 - k^2)E'(s) + (a - q s^2)E(s) = 0\]

где \(q = (n+1)n\) и \(a\) является собственным значением (не возвращается), соответствующим решениям.

Параметры:
h2float

h**2

k2float

k**2; должно быть больше чем h**2

nint

Степень

sfloat

Координата

pint

Порядок, может варьироваться в диапазоне [1,2n+1]

signm{1, -1}, необязательный

Знак предфактора функций. Может быть +/-1. См. Примечания.

signn{1, -1}, необязательный

Знак предфактора функций. Может быть +/-1. См. Примечания.

Возвращает:
Efloat

гармонический \(E^p_n(s)\)

Смотрите также

ellip_harm_2, ellip_normal

Примечания

Геометрическая интерпретация эллипсоидальных функций объясняется в [2], [3], [4]. signm и signn аргументы управляют знаком предфакторов для функций в соответствии с их типом:

K : +1
L : signm
M : signn
N : signm*signn

Добавлено в версии 0.15.0.

Ссылки

[1]

Цифровая библиотека математических функций 29.12 https://dlmf.nist.gov/29.12

[2]

Бардхан и Кнепли, «Вычислительная наука и повторное открытие: реализации с открытым исходным кодом эллипсоидальных гармоник для задач теории потенциала», Comput. Sci. Disc. 5, 014006 (2012) DOI:10.1088/1749-4699/5/1/014006.

[3]

Дэвид Дж. и Дешамбре П., «Вычисление эллипсоидальных гармоник гравитационного поля для малых тел Солнечной системы» стр. 30-36, 2000

[4]

Джордж Дассиос, «Эллипсоидальные гармоники: теория и приложения» стр. 418, 2012

Примеры

>>> from scipy.special import ellip_harm
>>> w = ellip_harm(5,8,1,1,2.5)
>>> w
2.5

Проверить, что функции действительно являются решениями уравнения Ламе:

>>> import numpy as np
>>> from scipy.interpolate import UnivariateSpline
>>> def eigenvalue(f, df, ddf):
...     r = (((s**2 - h**2) * (s**2 - k**2) * ddf
...           + s * (2*s**2 - h**2 - k**2) * df
...           - n * (n + 1)*s**2*f) / f)
...     return -r.mean(), r.std()
>>> s = np.linspace(0.1, 10, 200)
>>> k, h, n, p = 8.0, 2.2, 3, 2
>>> E = ellip_harm(h**2, k**2, n, p, s)
>>> E_spl = UnivariateSpline(s, E)
>>> a, a_err = eigenvalue(E_spl(s), E_spl(s,1), E_spl(s,2))
>>> a, a_err
(583.44366156701483, 6.4580890640310646e-11)