Namespaces
Variants

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

From cppreference.net
ヘッダーで定義 <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 >

/* common-floating-point-type */

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

目次

パラメータ

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(νπ)
(where J ν (x) is std:: cyl_bessel_j ( nu, x ) ) for x≥0 and non-integer nu ; for integer nu a limit is used.

エラー処理

エラーは以下のように報告されることがあります: 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 に対して以下を保証するのに十分であればよいのです:

  • 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以前)

num1 num2 が算術型を持つ場合、 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 */ num1 num2 の型の間で最も高い 浮動小数点変換ランク と最も高い 浮動小数点変換サブランク を持つ浮動小数点型であり、整数型の引数は double と同じ浮動小数点変換ランクを持つと見なされる。

最も高いランクとサブランクを持つ浮動小数点型が存在しない場合、 オーバーロード解決 は提供されたオーバーロードから使用可能な候補を生成しない。

(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': 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

関連項目

通常修正円柱ベッセル関数
(関数)
円柱ベッセル関数(第一種)
(関数)
非通常修正円柱ベッセル関数
(関数)

外部リンク

Weisstein, Eric W. "Bessel Function of the Second Kind." From MathWorld — A Wolfram Web Resource.
Weisstein, Eric W. "第2種ベッセル関数" MathWorld — Wolfram Webリソースより