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 的修正斯特鲁夫函数的值。
另请参阅
注释
[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])
通过为 v 和 z 提供数组来计算多个点处多个阶数的修正斯特鲁夫函数。这些数组必须可以广播到正确的形状。
>>> 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()