scipy.special.elliprj#
- scipy.special.elliprj(x, y, z, p, out=None) = <ufunc '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 是複數平面上的數字,沿負實軸切割(受限於其他約束,請參閱「Notes」),且最多其中一個可以為零。p 必須為非零。
- outndarray,可選
函數值的可選輸出陣列
- 返回:
註解
此程式碼實作了 Carlson 演算法,該演算法基於重複定理和高達 7 階的級數展開。[3] 此演算法與其早期版本略有不同,如 [1] 中所示,因為在內部迴圈中不再需要呼叫
elliprc
(或atan
/atanh
,請參閱 [4])。當引數在數量級上差異很大時,會使用漸近近似。[5]當輸入引數為複數時,輸入值受限於某些充分但非必要的約束。特別是,除非
x
、y
和z
具有非負實部,否則它們中的兩個必須是非負數且彼此共軛複數,而另一個是實數非負數。[1] 如果輸入不滿足參考文獻 [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,” in J. Blumlein, C. Schneider, P. Paule, eds., “Elliptic Integrals, Elliptic Functions and Modular Forms in Quantum Field Theory,” pp. 269-293, 2019 (Cham, Switzerland: Springer Nature Switzerland) https://arxiv.org/abs/math/1806.06725 https://doi.org/10.1007/978-3-030-04480-0
[5]B. C. Carlson, J. L. Gustafson, “Asymptotic Approximations for Symmetric Elliptic Integrals,” SIAM J. Math. Anls., vol. 25, no. 2, pp. 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)