scipy.special.hankel1#
- scipy.special.hankel1(v, z, out=None) = <ufunc 'hankel1'>#
第一类汉克尔函数
- 参数:
- varray_like
阶数 (浮点数)。
- zarray_like
参数 (浮点数或复数)。
- outndarray, optional
可选的输出数组,用于存储函数值
- 返回:
- 标量或 ndarray
第一类汉克尔函数的值。
另请参阅
hankel1e移除了前导指数行为的函数。
附注
AMOS [1] 例程 zbesh 的封装,该例程使用以下关系进行计算:
\[H^{(1)}_v(z) = \frac{2}{\imath\pi} \exp(-\imath \pi v/2) K_v(z \exp(-\imath\pi/2))\]其中 \(K_v\) 是第二类修正贝塞尔函数。对于负阶数,使用以下关系:
\[H^{(1)}_{-v}(z) = H^{(1)}_v(z) \exp(\imath\pi v)\]。
参考文献
[1]Donald E. Amos,“AMOS,一个用于复数参数和非负阶数的 Bessel 函数的可移植包”,http://netlib.org/amos/
示例
对于在 \(\mathbb{R}^2\) 中受到辐射边界条件约束的不均匀亥姆霍兹方程,格林函数由下式给出:
\[G(\mathbf{x}, \mathbf{x}^\prime) = \frac{1}{4i} H^{(1)}_0(k|\mathbf{x} - \mathbf{x^\prime}|)\]其中 \(k\) 是波数,\(H^{(1)}_0\) 是第一类汉克尔函数且阶数为零。在下面的示例中,我们将使用两个狄拉克源求解亥姆霍兹方程。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.special import hankel1 >>> k = 10 # Wavenumber >>> sources = [0.5, -0.5] # Location of two point sources >>> x, y = np.linspace(-3, 3, 300), np.linspace(-3, 3, 300) >>> Z = np.add.outer(1j*y, x) >>> U = np.zeros_like(Z) >>> for sz in sources: ... r = np.abs(Z - sz) ... U += (1j/4)*hankel1(0, k*r)
最后,我们将绘制解的实部。
>>> fig, ax = plt.subplots() >>> ax.pcolormesh(np.real(Z), np.imag(Z), np.real(U)) >>> plt.show()