scipy.special.modstruve#

scipy.special.modstruve(v, x, out=None) = <ufunc 'modstruve'>#

修正的斯特鲁夫函数。

返回在 x 处阶数为 v 的修正斯特鲁夫函数的值。修正的斯特鲁夫函数定义为,

\[L_v(x) = -\imath \exp(-\pi\imath v/2) H_v(\imath x),\]

其中 \(H_v\) 是斯特鲁夫函数。

参数:
varray_like

修正斯特鲁夫函数的阶数(浮点数)。

xarray_like

斯特鲁夫函数的参数(浮点数;除非 v 为整数,否则必须为正数)。

outndarray, optional

函数结果的可选输出数组

返回:
L标量或 ndarray

x 处阶数为 v 的修正斯特鲁夫函数的值。

另请参阅

struve

注释

[1] 中讨论的三种方法用于评估该函数

  • 幂级数

  • 用贝塞尔函数展开(如果 \(|x| < |v| + 20\)

  • 渐近大 x 展开(如果 \(x \geq 0.7v + 12\)

舍入误差基于和中最大的项进行估计,并返回与最小误差关联的结果。

参考文献

[1]

NIST 数学函数数字图书馆 https://dlmf.nist.gov/11

示例

计算在 2 处阶数为 1 的修正斯特鲁夫函数。

>>> import numpy as np
>>> from scipy.special import modstruve
>>> import matplotlib.pyplot as plt
>>> modstruve(1, 2.)
1.102759787367716

通过为阶数参数 v 提供列表来计算在 2 处阶数为 1、2 和 3 的修正斯特鲁夫函数。

>>> modstruve([1, 2, 3], 2.)
array([1.10275979, 0.41026079, 0.11247294])

通过为 x 提供数组来计算在多个点处阶数为 1 的修正斯特鲁夫函数。

>>> points = np.array([2., 5., 8.])
>>> modstruve(1, points)
array([  1.10275979,  23.72821578, 399.24709139])

通过为 vz 提供数组来计算多个点处多个阶数的修正斯特鲁夫函数。这些数组必须可以广播到正确的形状。

>>> orders = np.array([[1], [2], [3]])
>>> points.shape, orders.shape
((3,), (3, 1))
>>> modstruve(orders, points)
array([[1.10275979e+00, 2.37282158e+01, 3.99247091e+02],
       [4.10260789e-01, 1.65535979e+01, 3.25973609e+02],
       [1.12472937e-01, 9.42430454e+00, 2.33544042e+02]])

绘制从 -5 到 5 阶数为 0 到 3 的修正斯特鲁夫函数。

>>> fig, ax = plt.subplots()
>>> x = np.linspace(-5., 5., 1000)
>>> for i in range(4):
...     ax.plot(x, modstruve(i, x), label=f'$L_{i!r}$')
>>> ax.legend(ncol=2)
>>> ax.set_xlim(-5, 5)
>>> ax.set_title(r"Modified Struve functions $L_{\nu}$")
>>> plt.show()
../../_images/scipy-special-modstruve-1.png