std::cyl_neumann, std::cyl_neumannf, std::cyl_neumannl
Defined in header <cmath> |
||
---|---|---|
double cyl_neumann( double ν, double x ); float cyl_neumannf( float ν, float x ); long double cyl_neumannl( long double ν, long double x ); |
(1) | (since C++17) |
Promoted cyl_neumann( Arithmetic ν, Arithmetic x ); |
(2) | (since C++17) |
ν
and
x
.
double
. If any argument is
long double
, then the return type
Promoted
is also
long double
, otherwise the return type is always
double
.
Parameters
ν | - | the order of the function |
x | - | the argument of the function |
Return value
If no errors occur, value of the cylindrical Neumann function (Bessel function of the second kind) ofν
and
x
, is returned, that is N
ν(x) = Jν(x)cos(νπ)-J-ν(x)/sin(νπ) (where J
ν(x) is
std::cyl_bessel_j(ν,x)
) for x≥0 and non-integer ν; for integer ν a limit is used.
Error handling
Errors may be reported as specified in math_errhandling
:
- If the argument is NaN, NaN is returned and domain error is not reported
- If ν>=128, the behavior is implementation-defined
Notes
Implementations that do not support C++17, but support ISO 29124:2010, provide this function if __STDCPP_MATH_SPEC_FUNCS__
is defined by the implementation to a value at least 201003L and if the user defines __STDCPP_WANT_MATH_SPEC_FUNCS__
before including any standard library headers.
Implementations that do not support ISO 29124:2010 but support TR 19768:2007 (TR1), provide this function in the header tr1/cmath
and namespace std::tr1
.
An implementation of this function is also available in boost.math.
Example
#include <cassert> #include <cmath> #include <iostream> #include <numbers> const double π = std::numbers::pi; // or std::acos(-1) in pre C++20 // To calculate the cylindrical Neumann function via cylindrical Bessel function of the // first kind we have to implement the J₋ᵥ, because the direct invocation of the // std::cyl_bessel_j(ν,x), per formula above, for negative ν raises 'std::domain_error': // Bad argument in __cyl_bessel_j. double J₋ᵥ (double ν, double x) { return std::cos(-ν*π) * std::cyl_bessel_j(-ν,x) -std::sin(-ν*π) * std::cyl_neumann(-ν,x); } double J₊ᵥ (double ν, double x) { return std::cyl_bessel_j(ν,x); } double Jᵥ (double ν, double x) { return ν < 0.0 ? J₋ᵥ(ν,x) : J₊ᵥ(ν,x); } int main() { std::cout << "spot checks for ν == 0.5\n" << std::fixed << std::showpos; double ν = 0.5; for (double x = 0.0; x <= 2.0; x += 0.333) { const double n = std::cyl_neumann(ν, x); const double j = (Jᵥ(ν, x)*std::cos(ν*π) - Jᵥ(-ν, x)) / std::sin(ν*π); std::cout << "N_.5(" << x << ") = " << n << ", calculated via J = " << j << '\n'; assert(n == j); } }
Output:
spot checks for ν == 0.5 N_.5(+0.000000) = -inf, calculated via J = -inf N_.5(+0.333000) = -1.306713, calculated via J = -1.306713 N_.5(+0.666000) = -0.768760, calculated via J = -0.768760 N_.5(+0.999000) = -0.431986, calculated via J = -0.431986 N_.5(+1.332000) = -0.163524, calculated via J = -0.163524 N_.5(+1.665000) = +0.058165, calculated via J = +0.058165 N_.5(+1.998000) = +0.233876, calculated via J = +0.233876
See also
(C++17)(C++17)(C++17)
|
regular modified cylindrical Bessel functions (function) |
(C++17)(C++17)(C++17)
|
cylindrical Bessel functions (of the first kind) (function) |
(C++17)(C++17)(C++17)
|
irregular modified cylindrical Bessel functions (function) |
External links
Weisstein, Eric W. "Bessel Function of the Second Kind." From MathWorld — A Wolfram Web Resource.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/special_functions/cyl_neumann