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 函數的值。
註解
對於正數 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])
通過為 v 和 z 提供陣列,來評估不同階數的多個點的函數。兩個陣列都必須可廣播到正確的形狀。要計算 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()