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 для всех неквалифицированных cv типов с плавающей запятой в качестве типа параметров nu и x . (since 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 nu (x) =
J nu (x)cos(nuπ)-J -nu (x)
sin(nuπ)
(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; // или std::acos(-1) в стандартах до C++20
// Для вычисления цилиндрической функции Неймана через цилиндрическую функцию Бесселя
// первого рода необходимо реализовать J, поскольку прямое использование
// std::cyl_bessel_j(nu, x), согласно приведенной формуле,
// для отрицательных nu вызывает 'std::domain_error': Неверный аргумент в __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

Смотрите также

регулярные модифицированные цилиндрические функции Бесселя
(функция)
цилиндрические функции Бесселя (первого рода)
(функция)
нерегулярные модифицированные цилиндрические функции Бесселя
(функция)

Внешние ссылки

Вайсштейн, Эрик В. "Функция Бесселя второго рода." Из MathWorld — веб-ресурс Wolfram.