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
의 오버로드를 제공합니다.
(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
nu
(x) =
| J nu (x)cos(nuπ)-J -nu (x) |
| sin(nuπ) |
오류 처리
오류는 다음과 같이 보고될 수 있습니다: 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) // 원통형 Neumann 함수를 제1종 원통형 Bessel 함수를 통해 계산하려면 // J를 구현해야 합니다. 왜냐하면 위 공식에 따라 std::cyl_bessel_j(nu, x)를 // 직접 호출할 경우, 음수 nu에 대해 'std::domain_error': Bad argument in __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)
|
제1종 원통 베셀 함수
(함수) |
|
(C++17)
(C++17)
(C++17)
|
비정규 수정 원통 베셀 함수
(함수) |
외부 링크
| Weisstein, Eric W. "Bessel Function of the Second Kind." MathWorld — Wolfram 웹 리소스에서. |