Ich versuche, die Parabolic Zylinder D Funktion von SciPy zu verwenden und habe Probleme mit komplexen Argumenten. Beispielcode, den Fehler zu erzeugen ist:SciPy Parabolic Zylinder D und komplexe Argumente
#!/usr/bin/env python
import numpy
import scipy.special as special
# test real numbers
test = 0.735759
A = test - special.pbdv(1,2)[0]
print A
# test complex numbers.
test = 9.43487e-16+1j*5.1361
A = test - special.pbdv(3,-1j)[0]
print A
Der Fehler, den ich bekommen ist:
---> 19 A = test - special.pbdv(3,-1j)[0]
20 print A
21
TypeError: ufunc 'pbdv' not supported for the input types, and the inputs could not be
safely coerced to any supported types according to the casting rule ''safe''
From the documentation sieht es aus wie die Funktion einfach nicht mit komplexen Argumenten arbeiten definiert. Andere scipy-Funktionen (wie die Bessel-Funktion jv) geben ausdrücklich an, dass sie komplexe Argumente akzeptieren, daher glaube ich nicht, dass ich falsch liege, wenn ich den Fehler lese.
Meine Follow-up-Frage: Gibt es eine Implementierung der parabolischen Zylinder-D-Funktion in Python, die komplexe Argumente akzeptiert? Ich habe versucht, mein eigenes aus Abramowitz and Stegun zu konstruieren, aber ich kann nicht scheinen, es mit Mathematica zu vereinbaren. Vorschläge würden geschätzt werden. Meine Google-Fähigkeiten haben nichts aufgedeckt.
Bearbeiten: Question is similar to the question here.
FWIW: 'mpmath' hat mehrere Varianten parabolischer Zylinderfunktionen, einschließlich' pcfd (n, z) ', die komplexes' z' akzeptiert. Es ist ziemlich langsam, aber da es Teil von 'mpmath' ist, können Sie die Präzision erhöhen, um so hoch zu sein, wie Sie möchten (oder die Geduld haben). Wenn nichts anderes, könnten Sie es verwenden, um Ihre Implementierung zu überprüfen. –