scipy.special.yve#

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

實數階指數縮放貝索函數,第二類。

返回複數 z 處,實數階 v 的指數縮放貝索函數,第二類

yve(v, z) = yv(v, z) * exp(-abs(z.imag))
參數:
varray_like

階數 (浮點數)。

zarray_like

變數 (浮點數或複數)。

outndarray, optional

函數結果的可選輸出陣列

返回:
Yscalar or ndarray

指數縮放貝索函數的值。

參見

yv

未縮放貝索函數,第二類實數階。

註解

對於正 v 值,計算使用 AMOS [1] zbesy 常式進行,該常式利用與漢克爾貝索函數 \(H_v^{(1)}\)\(H_v^{(2)}\) 的關聯,

\[Y_v(z) = \frac{1}{2\imath} (H_v^{(1)} - H_v^{(2)}).\]

對於負 v 值,使用公式,

\[Y_{-v}(z) = Y_v(z) \cos(\pi v) + J_v(z) \sin(\pi v)\]

其中 \(J_v(z)\) 是第一類貝索函數,使用 AMOS 常式 zbesj 計算。 請注意,對於整數 v,第二項正好為零;為了提高精度,對於 v 值(使得 v = floor(v)),第二項被顯式省略。

指數縮放貝索函數對於大的 z 值很有用:對於這些值,未縮放的貝索函數很容易下溢或溢位。

參考文獻

[1]

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

範例

比較 yvyve 對於大的複數變數 z 的輸出,方法是計算階數為 v=1,變數為 z=1000j 時的值。 我們看到 yv 返回 nan,但 yve 返回一個有限的數字

>>> import numpy as np
>>> from scipy.special import yv, yve
>>> v = 1
>>> z = 1000j
>>> yv(v, z), yve(v, z)
((nan+nanj), (-0.012610930256928629+7.721967686709076e-19j))

對於實數變數 zyve 返回與 yv 相同的值,直到浮點誤差。

>>> v, z = 1, 1000
>>> yv(v, z), yve(v, z)
(-0.02478433129235178, -0.02478433129235179)

該函數可以通過為 v 提供列表或 NumPy 陣列來同時評估多個階數

>>> yve([1, 2, 3], 1j)
array([-0.20791042+0.14096627j,  0.38053618-0.04993878j,
       0.00815531-1.66311097j])

以相同的方式,該函數可以通過為 z 提供列表或 NumPy 陣列,在一次呼叫中評估多個點

>>> yve(1, np.array([1j, 2j, 3j]))
array([-0.20791042+0.14096627j, -0.21526929+0.01205044j,
       -0.19682671+0.00127278j])

也可以通過為 vz 提供具有廣播兼容形狀的陣列,同時評估多個階數在多個點上的值。 計算兩個不同階數 v 和三個點 zyve,得到一個 2x3 陣列。

>>> v = np.array([[1], [2]])
>>> z = np.array([3j, 4j, 5j])
>>> v.shape, z.shape
((2, 1), (3,))
>>> yve(v, z)
array([[-1.96826713e-01+1.27277544e-03j, -1.78750840e-01+1.45558819e-04j,
        -1.63972267e-01+1.73494110e-05j],
       [1.94960056e-03-1.11782545e-01j,  2.02902325e-04-1.17626501e-01j,
        2.27727687e-05-1.17951906e-01j]])