scipy.special.elliprj#
- scipy.special.elliprj(x, y, z, p, out=None) = <ufunc 'elliprj'>#
Symmetrisches elliptisches Integral dritter Art.
Die Funktion RJ ist definiert als [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\]Warnung
Diese Funktion sollte als experimentell betrachtet werden, wenn die Eingaben unausgeglichen sind. Überprüfen Sie die Korrektheit mit einer anderen unabhängigen Implementierung.
- Parameter:
- x, y, z, parray_like
Reale oder komplexe Eingabeparameter. x, y oder z sind Zahlen in der komplexen Ebene, die entlang der negativen reellen Achse geschnitten sind (vorbehaltlich weiterer Einschränkungen, siehe Hinweise), und höchstens eine davon kann Null sein. p muss ungleich Null sein.
- outndarray, optional
Optionales Ausgabe-Array für die Funktionswerte
- Rückgabe:
- RSkalar oder ndarray
Wert des Integrals. Wenn alle von x, y, z und p reell sind, ist der Rückgabewert reell. Andernfalls ist der Rückgabewert komplex.
Wenn p reell und negativ ist, während x, y und z reell, nicht-negativ und höchstens eine davon Null ist, wird der Cauchy-Hauptwert zurückgegeben. [1] [2]
Siehe auch
Hinweise
Der Code implementiert den Algorithmus von Carlson, der auf Duplikationstheoremen und Reihenentwicklungen bis zur 7. Ordnung basiert. [3] Der Algorithmus unterscheidet sich leicht von seiner früheren Inkarnation, wie sie in [1] erscheint, da der Aufruf von
elliprc(oderatan/atanh, siehe [4]) in der inneren Schleife nicht mehr benötigt wird. Asymptotische Näherungen werden verwendet, wenn Argumente sich in der Größenordnung stark unterscheiden. [5]Die Eingabewerte unterliegen bestimmten hinreichenden, aber nicht notwendigen Bedingungen, wenn die Eingabeargumente komplex sind. Insbesondere müssen
x,yundznicht-negative Realteile haben, es sei denn, zwei von ihnen sind nicht-negativ und komplex-konjugiert zueinander, während das andere eine reelle nicht-negative Zahl ist. [1] Wenn die Eingaben die in Ref. [1] beschriebene hinreichende Bedingung nicht erfüllen, werden sie sofort zurückgewiesen und die Ausgabe wird auf NaN gesetzt.In dem Fall, dass einer von
x,yundzgleichpist, sollte die Funktionelliprdwegen ihres weniger restriktiven Bereichs bevorzugt werden.Hinzugefügt in Version 1.8.0.
Referenzen
[1] (1,2,3,4,5)B. C. Carlson, „Numerical computation of real or complex elliptic integrals“, Numer. Algorithm, Bd. 10, Nr. 1, S. 13–26, 1995. https://arxiv.org/abs/math/9409227 https://doi.org/10.1007/BF02198293
[2]B. C. Carlson, hrsg., Kapitel 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., Bd. 118, Nr. 1-2, S. 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, hrsg., „Elliptic Integrals, Elliptic Functions and Modular Forms in Quantum Field Theory“, S. 269-293, 2019 (Cham, Schweiz: 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, „Asymptotic Approximations for Symmetric Elliptic Integrals“, SIAM J. Math. Anls., Bd. 25, Nr. 2, S. 288-303, 1994. https://arxiv.org/abs/math/9310223 https://doi.org/10.1137/S0036141092228477
Beispiele
Grundlegende Homogenitätseigenschaft
>>> 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)
Reduktion auf einfachere elliptische Integrale
>>> elliprj(x, y, z, z) (0.08288462362195129-0.028376809745123258j)
>>> from scipy.special import elliprd >>> elliprd(x, y, z) (0.08288462362195136-0.028376809745123296j)
Alle Argumente stimmen überein
>>> elliprj(x, x, x, x) (-0.03986825876151896-0.14051741840449586j)
>>> np.power(x, -1.5) (-0.03986825876151894-0.14051741840449583j)