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 > /* 共通浮動小数点型 */ |
(A) | (C++17以降) |
std::cyl_neumann のオーバーロードを提供します。(C++23以降)目次 |
[編集] パラメータ
| nu | - | 関数の次数 |
| x | - | 関数の引数 |
[編集] 戻り値
エラーが発生しなかった場合、 x≥0 で nu が整数でない場合、Neumann関数(第2種ベッセル関数)の nu と x における値、すなわち Nnu(x) =| Jnu(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 と2番目の引数 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; // 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 J, because the direct invocation of the // std::cyl_bessel_j(nu, x), per formula above, // for negative nu raises '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 << "spot checks for 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 << ", calculated via J = " << j << '\n'; assert(n == j); } }
出力
spot checks for nu == 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
[編集] 関連項目
| (C++17)(C++17)(C++17) |
正則変形ベッセル関数 (関数) |
| (C++17)(C++17)(C++17) |
(第一種)円柱ベッセル関数 (関数) |
| (C++17)(C++17)(C++17) |
非正則変形ベッセル関数 (関数) |
[編集] 外部リンク
| Weisstein, Eric W. "Bessel Function of the Second Kind." MathWorld — A Wolfram Web Resource より。 |