scipy.special.ive#

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

指數縮放的modified Bessel function of the first kind。

定義為

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

對於沒有實部的虛數,返回未縮放的第一類 Bessel 函數 iv

參數:
varray_like of float

階數。

zarray_like of float or complex

變數。

outndarray, optional

函數值的選用性輸出陣列

返回:
純量或 ndarray

指數縮放的 modified Bessel 函數的值。

另請參閱

iv

第一類 Modified Bessel 函數

i0e

此函數對於階數 0 的更快實作

i1e

此函數對於階數 1 的更快實作

註解

對於正數 v,會調用 AMOS [1] zbesi 常式。它對小的 z 使用冪級數,對大的 abs(z) 使用漸近展開,由朗斯基行列式標準化的米勒演算法和對中等大小使用諾伊曼級數,以及對於大階數的 \(I_v(z)\)\(J_v(z)\) 的均勻漸近展開。反向遞迴用於生成序列或在必要時減少階數。

以上計算在右半平面完成,並通過公式繼續到左半平面,

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

(當 z 的實部為正時有效)。對於負數 v,使用公式

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

其中 \(K_v(z)\) 是第二類 modified Bessel 函數,使用 AMOS 常式 zbesk 評估。

ive 對於大變數 z 非常有用:對於這些,iv 很容易溢位,而 ive 由於指數縮放而不會溢位。

參考文獻

[1]

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

範例

在以下範例中,iv 返回 infinity,而 ive 仍然返回一個有限的數字。

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

通過為 v 參數提供列表或 NumPy 陣列,來評估不同階數下的一個點的函數

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

通過為 z 提供陣列,來評估階數 0 的多個點的函數。

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

通過為 vz 提供陣列,來評估不同階數的多個點的函數。兩個陣列都必須可廣播到正確的形狀。要計算 1D 點陣列的階數 0、1 和 2

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

繪製階數 0 到 3 從 -5 到 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