名前空間
変種
操作

std::cyl_neumann, std::cyl_neumannf, std::cyl_neumannl

From cppreference.com
 
 
 
 
ヘッダー <cmath> で定義
(1)
float      cyl_neumann ( float nu, float x );

double      cyl_neumann ( double nu, double x );

long double cyl_neumann ( long double nu, long 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 >

/* 共通浮動小数点型 */

   cyl_neumann( Arithmetic1 nu, Arithmetic2 x );
(A) (C++17以降)
1-3) Neumann関数(第2種ベッセル関数またはウェーバー関数とも呼ばれる)を nux について計算します。ライブラリは、パラメータ nux の型として、すべての cv 修飾されていない浮動小数点型に対する std::cyl_neumann のオーバーロードを提供します。(C++23以降)
A) その他の算術型の組み合わせすべてに対して、追加のオーバーロードが提供されます。

目次

[編集] パラメータ

nu - 関数の次数
x - 関数の引数

[編集] 戻り値

エラーが発生しなかった場合、 x≥0nu が整数でない場合、Neumann関数(第2種ベッセル関数)の nux における値、すなわち Nnu(x) =
Jnu(x)cos(nuπ)-J-nu(x)
sin(nuπ)
(ここで Jnu(x)std::cyl_bessel_j(nu, x))が返されます。 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 に対して以下を保証するのに十分である必要がある。

  • num1 または num2 の型が long double の場合、 std::cyl_neumann(num1, num2)std::cyl_neumann(static_cast<long double>(num1),
                     static_cast<long double>(num2))
    と同じ効果を持ちます。
  • それ以外の場合で、 num1 および/または num2 の型が double または整数型の場合、 std::cyl_neumann(num1, num2)std::cyl_neumann(static_cast<double>(num1),
                     static_cast<double>(num2))
    と同じ効果を持ちます。
  • それ以外の場合で、 num1 または num2 の型が float の場合、 std::cyl_neumann(num1, num2)std::cyl_neumann(static_cast<float>(num1),
                     static_cast<float>(num2))
    と同じ効果を持ちます。
(C++23まで)

num1num2 が算術型の場合、 std::cyl_neumann(num1, num2)std::cyl_neumann(static_cast< /* common-floating-point-type */ >(num1),
                 static_cast< /* common-floating-point-type */ >(num2))
と同じ効果を持ちます。ここで /* common-floating-point-type */ は、 num1num2 の型の間で、最も高い 浮動小数点変換ランクと最も高い 浮動小数点変換サブランクを持つ浮動小数点型です。整数型の引数は、 double と同じ浮動小数点変換ランクを持つとみなされます。

そのような最高のランクとサブランクセを持つ浮動小数点型が存在しない場合、オーバーロード解決は提供されたオーバーロードから使用可能な候補を導出しません。

(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

[編集] 関連項目

正則変形ベッセル関数
(関数) [編集]
(第一種)円柱ベッセル関数
(関数) [編集]
非正則変形ベッセル関数
(関数) [編集]

[編集] 外部リンク

Weisstein, Eric W. "Bessel Function of the Second Kind." MathWorld — A Wolfram Web Resource より。
English 日本語 中文(简体) 中文(繁體)