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()
../../_images/scipy-special-hankel1-1.png