scipy.special.elliprj#
-
scipy.special.elliprj(x, y, z, p, выход=None) =
'elliprj'> # Симметричный эллиптический интеграл третьего рода.
Функция RJ определяется как [1]
\[R_{\mathrm{J}}(x, y, z, p) = \frac{3}{2} \int_0^{+\infty} [(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1} dt\]Предупреждение
Эту функцию следует считать экспериментальной, когда входные данные несбалансированы. Проверьте корректность с другой независимой реализацией.
- Параметры:
- x, y, z, parray_like
Вещественные или комплексные входные параметры. x, y, или z являются числами в комплексной плоскости с разрезом вдоль отрицательной вещественной оси (с дополнительными ограничениями, см. Примечания), и не более одного из них может быть нулём. p должно быть ненулевым.
- выходndarray, необязательно
Необязательный выходной массив для значений функции
- Возвращает:
- Rскаляр или ndarray
Значение интеграла. Если все x, y, z, и p являются вещественными, возвращаемое значение вещественное. В противном случае возвращаемое значение комплексное.
Если p является вещественным и отрицательным, в то время как x, y, и z являются вещественными, неотрицательными, и не более одного из них равно нулю, возвращается главное значение Коши. [1] [2]
Смотрите также
Примечания
Код реализует алгоритм Карлсона на основе теорем дублирования и разложения в ряд до 7-го порядка. [3] Алгоритм немного отличается от своей более ранней версии, как он представлен в [1], в том, что вызов
elliprc(илиatan/atanh, см. [4]) больше не нужен во внутреннем цикле. Асимптотические приближения используются там, где аргументы сильно различаются по порядку величины. [5]Входные значения подчиняются определенным достаточным, но не необходимым ограничениям, когда входные аргументы комплексные. В частности,
x,y, иzдолжны иметь неотрицательные действительные части, если только две из них не являются неотрицательными и комплексно-сопряженными друг другу, а другая — действительным неотрицательным числом. [1] Если входные данные не удовлетворяют достаточному условию, описанному в Ref. [1] они полностью отклоняются с выводом, установленным в NaN.В случае, когда один из
x,y, иzравноp, функцияelliprdследует предпочесть из-за его менее ограниченной области определения.Добавлено в версии 1.8.0.
Ссылки
[1] (1,2,3,4,5)B. C. Carlson, "Numerical computation of real or complex elliptic integrals," Numer. Algorithm, vol. 10, no. 1, pp. 13-26, 1995. https://arxiv.org/abs/math/9409227 https://doi.org/10.1007/BF02198293
[2]B. C. Carlson, ed., Chapter 19 in “Digital Library of Mathematical Functions,” NIST, US Dept. of Commerce. https://dlmf.nist.gov/19.20.iii
[3]B. C. Carlson, J. FitzSimmons, “Reduction Theorems for Elliptic Integrands with the Square Root of Two Quadratic Factors,” J. Comput. Appl. Math., vol. 118, nos. 1-2, pp. 71-85, 2000. https://doi.org/10.1016/S0377-0427(00)00282-X
[4]F. Johansson, “Numerical Evaluation of Elliptic Functions, Elliptic Integrals and Modular Forms,” в J. Blumlein, C. Schneider, P. Paule, ред., “Elliptic Integrals, Elliptic Functions and Modular Forms in Quantum Field Theory,” стр. 269-293, 2019 (Cham, Switzerland: Springer Nature Switzerland) https://arxiv.org/abs/1806.06725 https://doi.org/10.1007/978-3-030-04480-0
[5]B. C. Carlson, J. L. Gustafson, «Асимптотические приближения для симметричных эллиптических интегралов», SIAM J. Math. Anls., т. 25, № 2, стр. 288-303, 1994. https://arxiv.org/abs/math/9310223 https://doi.org/10.1137/S0036141092228477
Примеры
Основное свойство однородности:
>>> import numpy as np >>> from scipy.special import elliprj
>>> x = 1.2 + 3.4j >>> y = 5. >>> z = 6. >>> p = 7. >>> scale = 0.3 - 0.4j >>> elliprj(scale*x, scale*y, scale*z, scale*p) (0.10834905565679157+0.19694950747103812j)
>>> elliprj(x, y, z, p)*np.power(scale, -1.5) (0.10834905565679556+0.19694950747103854j)
Приведение к более простому эллиптическому интегралу:
>>> elliprj(x, y, z, z) (0.08288462362195129-0.028376809745123258j)
>>> from scipy.special import elliprd >>> elliprd(x, y, z) (0.08288462362195136-0.028376809745123296j)
Все аргументы совпадают:
>>> elliprj(x, x, x, x) (-0.03986825876151896-0.14051741840449586j)
>>> np.power(x, -1.5) (-0.03986825876151894-0.14051741840449583j)