scipy.special.ive#

scipy.special.ive(v, z, out=None) = <ufunc 'ive'>#

Exponentiell skalierte modifizierte Besselfunktion erster Art.

Definiert als

ive(v, z) = iv(v, z) * exp(-abs(z.real))

Für imaginäre Zahlen ohne Realteil wird die unskalierte Besselfunktion erster Art iv zurückgegeben.

Parameter:
varray_like of float

Ordnung.

zarray_like von float oder complex

Argument.

outndarray, optional

Optionales Ausgabe-Array für die Funktionswerte

Rückgabe:
skalar oder ndarray

Werte der exponentiell skalierten modifizierten Besselfunktion.

Siehe auch

iv

Modifizierte Besselfunktion erster Art

i0e

Schnellere Implementierung dieser Funktion für Ordnung 0

i1e

Schnellere Implementierung dieser Funktion für Ordnung 1

Hinweise

Für positives v wird die AMOS [1] zbesi Routine aufgerufen. Sie verwendet eine Potenzreihe für kleine z, die asymptotische Entwicklung für große abs(z), den Miller-Algorithmus normalisiert durch das Wronskion und eine Neumann-Reihe für mittlere Beträge sowie die uniforme asymptotische Entwicklung für \(I_v(z)\) und \(J_v(z)\) für große Ordnungen. Rückwärtsrekursion wird verwendet, um Sequenzen zu generieren oder Ordnungen bei Bedarf zu reduzieren.

Die obigen Berechnungen werden in der rechten Halbebene durchgeführt und durch die Formel in die linke Halbebene fortgesetzt,

\[I_v(z \exp(\pm\imath\pi)) = \exp(\pm\pi v) I_v(z)\]

(gültig, wenn der Realteil von z positiv ist). Für negatives v wird die Formel

\[I_{-v}(z) = I_v(z) + \frac{2}{\pi} \sin(\pi v) K_v(z)\]

verwendet, wobei \(K_v(z)\) die modifizierte Besselfunktion zweiter Art ist, ausgewertet mit der AMOS Routine zbesk.

ive ist nützlich für große Argumente z: für diese überläuft iv leicht, während ive aufgrund der exponentiellen Skalierung nicht überläuft.

Referenzen

[1]

Donald E. Amos, „AMOS, A Portable Package for Bessel Functions of a Complex Argument and Nonnegative Order“, http://netlib.org/amos/

Beispiele

Im folgenden Beispiel gibt iv Unendlich zurück, während ive immer noch eine endliche Zahl zurückgibt.

>>> from scipy.special import iv, ive
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> iv(3, 1000.), ive(3, 1000.)
(inf, 0.01256056218254712)

Werten Sie die Funktion an einem Punkt für verschiedene Ordnungen aus, indem Sie eine Liste oder ein NumPy-Array als Argument für den Parameter v angeben

>>> ive([0, 1, 1.5], 1.)
array([0.46575961, 0.20791042, 0.10798193])

Auswertung der Funktion an mehreren Punkten für Ordnung 0 durch Übergabe eines Arrays für z.

>>> points = np.array([-2., 0., 3.])
>>> ive(0, points)
array([0.30850832, 1.        , 0.24300035])

Werten Sie die Funktion an mehreren Punkten für verschiedene Ordnungen aus, indem Sie Arrays sowohl für v als auch für z angeben. Beide Arrays müssen so erweiterbar sein, dass sie die richtige Form erhalten. Um die Ordnungen 0, 1 und 2 für ein 1D-Array von Punkten zu berechnen

>>> ive([[0], [1], [2]], points)
array([[ 0.30850832,  1.        ,  0.24300035],
       [-0.21526929,  0.        ,  0.19682671],
       [ 0.09323903,  0.        ,  0.11178255]])

Plotten Sie die Funktionen der Ordnungen 0 bis 3 von -5 bis 5.

>>> fig, ax = plt.subplots()
>>> x = np.linspace(-5., 5., 1000)
>>> for i in range(4):
...     ax.plot(x, ive(i, x), label=fr'$I_{i!r}(z)\cdot e^{{-|z|}}$')
>>> ax.legend()
>>> ax.set_xlabel(r"$z$")
>>> plt.show()
../../_images/scipy-special-ive-1.png