std:: cyl_neumann, std:: cyl_neumannf, std:: cyl_neumannl
|
定义于头文件
<cmath>
|
||
| (1) | ||
|
float
cyl_neumann
(
float
nu,
float
x
)
;
double
cyl_neumann
(
double
nu,
double
x
)
;
|
(C++17 起)
(C++23 前) |
|
|
/* floating-point-type */
cyl_neumann
(
/* floating-point-type */
nu,
/* floating-point-type */ x ) ; |
(C++23 起) | |
|
float
cyl_neumannf
(
float
nu,
float
x
)
;
|
(2) | (C++17 起) |
|
long
double
cyl_neumannl
(
long
double
nu,
long
double
x
)
;
|
(3) | (C++17 起) |
|
定义于头文件
<cmath>
|
||
|
template
<
class
Arithmetic1,
class
Arithmetic2
>
/* common-floating-point-type */
|
(A) | (C++17 起) |
std::cyl_neumann
的重载版本,作为参数
nu
和
x
的类型。
(C++23 起)
目录 |
参数
| nu | - | 函数的阶数 |
| x | - | 函数的参数 |
返回值
If no errors occur, value of the cylindrical Neumann function (Bessel function of the second kind) of
nu
and
x
, is returned, that is
N
ν
(x) =
| J ν (x)cos(νπ)-J -ν (x) |
| sin(νπ) |
错误处理
错误报告方式遵循 math_errhandling 规范:
- 如果参数为 NaN,则返回 NaN 且不报告定义域错误。
- 如果 nu≥128 ,行为由实现定义。
注释
不支持C++17但支持
ISO 29124:2010
的实现,若实现将
__STDCPP_MATH_SPEC_FUNCS__
定义为至少201003L的值,且用户在包含任何标准库头文件之前定义了
__STDCPP_WANT_MATH_SPEC_FUNCS__
,则会提供此函数。
不支持 ISO 29124:2010 但支持 TR 19768:2007 (TR1) 的实现,会在头文件
tr1/cmath
和命名空间
std::tr1
中提供此函数。
该函数的实现也可在 boost.math 中找到。
额外的重载并不需要完全按照 (A) 的形式提供。只需确保对于它们的第一个参数 num1 和第二个参数 num2 满足以下条件:
|
(C++23 前) |
|
若
num1
和
num2
具有算术类型,则
std
::
cyl_neumann
(
num1, num2
)
的效果等同于
std
::
cyl_neumann
(
static_cast
<
/* common-floating-point-type */
>
(
num1
)
,
若不存在具有最高等级和子等级的此类浮点类型,则 重载决议 不会从提供的重载中得到可用候选。 |
(C++23 起) |
示例
#include <cassert> #include <cmath> #include <iostream> #include <numbers> const double π = std::numbers::pi; // 或在 C++20 之前使用 std::acos(-1) // 为了通过第一类柱贝塞尔函数计算柱诺依曼函数,我们需要实现 J, // 因为直接调用 std::cyl_bessel_j(nu, x),根据上述公式, // 对于负的 nu 会引发 'std::domain_error': __cyl_bessel_j 中的参数错误。 double J_neg(double nu, double x) { return std::cos(-nu * π) * std::cyl_bessel_j(-nu, x) -std::sin(-nu * π) * std::cyl_neumann(-nu, x); } double J_pos(double nu, double x) { return std::cyl_bessel_j(nu, x); } double J(double nu, double x) { return nu < 0.0 ? J_neg(nu, x) : J_pos(nu, x); } int main() { std::cout << "对 nu == 0.5 的抽查\n" << std::fixed << std::showpos; const double nu = 0.5; for (double x = 0.0; x <= 2.0; x += 0.333) { const double n = std::cyl_neumann(nu, x); const double j = (J(nu, x) * std::cos(nu * π) - J(-nu, x)) / std::sin(nu * π); std::cout << "N_.5(" << x << ") = " << n << ", 通过 J 计算 = " << j << '\n'; assert(n == j); } }
输出:
对 nu == 0.5 的抽查 N_.5(+0.000000) = -inf, 通过 J 计算 = -inf N_.5(+0.333000) = -1.306713, 通过 J 计算 = -1.306713 N_.5(+0.666000) = -0.768760, 通过 J 计算 = -0.768760 N_.5(+0.999000) = -0.431986, 通过 J 计算 = -0.431986 N_.5(+1.332000) = -0.163524, 通过 J 计算 = -0.163524 N_.5(+1.665000) = +0.058165, 通过 J 计算 = +0.058165 N_.5(+1.998000) = +0.233876, 通过 J 计算 = +0.233876
参见
|
(C++17)
(C++17)
(C++17)
|
正则变形柱贝塞尔函数
(函数) |
|
(C++17)
(C++17)
(C++17)
|
柱贝塞尔函数(第一类)
(函数) |
|
(C++17)
(C++17)
(C++17)
|
非正则变形柱贝塞尔函数
(函数) |
外部链接
| 魏斯坦, 埃里克·W. 《第二类贝塞尔函数》 摘自 MathWorld —— 一个 Wolfram 网络资源。 |