Как использовать Boost для бесселевой функции в C ++ - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь написать сферическую функцию Бесселя на C ++ и использую #include <boost/math/special_functions/bessel.hpp> и sph_bessel(v,x) в своем коде, но произошла ошибка, скажем, что это не объявлено в этой области. Я компилирую с g ++ test.cpp. Пожалуйста, помогите мне.

#include <cmath>
#include <iostream>
#include <boost/math/special_functions/bessel.hpp> 
using namespace std;
int main()
{
    // spot check for n == 1
    double x = 1.2345;
    cout << "j_1(" << x << ") = " << sph_bessel(1, x) << '\n';
}

скомпилируйте код с:

g++ test.cpp

и выдайте эту ошибку:

 error: ‘sph_bessel’ was not declared in this scope
 cout << "j_1(" << x << ") = " << sph_bessel(1, x) << '\n';
 a.cpp:9:38: note: suggested alternative:
 In file included from a.cpp:3:0:
 /usr/include/boost/math/special_functions/bessel.hpp:544:79: note:            ‘boost::math::sph_bessel’
 ename detail::bessel_traits<T, T, policies::policy<> >::result_type     sph_bessel(unsigned v, T x)

1 Ответ

0 голосов
/ 24 сентября 2018

Сообщение об ошибке говорит вам, что делать:

 a.cpp:9:38: note: suggested alternative:
             ‘boost::math::sph_bessel’

, поэтому код должен быть:

 cout << "j_1(" << x << ") = " << boost::math::sph_bessel(1, x) << '\n';

или Вы можете добавить:

using namespace boost::math;

но это настоятельно не рекомендуется: Почему «использование пространства имен std» считается плохой практикой?

Поэтому я бы вместо этого предложил:

namespace bmath = boost::math;

Тогда вместо boost::math::sph_bessel(1, x)Вы можете написать: bmath::sph_bessel(1, x).

...