为什么不能使用复杂的输入来提升bessel函数?

时间:2013-11-14 15:32:15

标签: c++ boost c++11 complex-numbers bessel-functions

根据boost文档,boost特殊函数bessel函数(特别是修改过的bessel函数)应该能够接受复杂的输入。

但是,当我尝试提供一个时,我收到编译错误,抱怨操作数类型<float没有std::complex<float>运算符。

这是我的代码:

using namespace boost::math;    
std::complex<float> cpxTerm = std::complex<float>(m_u1 * cos(az), -wbar * cos(sin(lim)));
std::complex<float> besselTerm = cyl_bessel_i(0, cpxTerm);

正如您所看到的,我正在尝试将boost的修改后的bessel函数实现用于第0阶,第一类修改的bessel函数。

这会返回错误页面,但据我所知,所有这些都抱怨输入操作数缺少<运算符。

我尝试将模板参数明确指定为<int, complex><double, complex><complex, complex>无效。

以下是一个例子:

boost.1.50.0/include/boost/math/special_functions/detail/bessel_ik.hpp(108): error: no operator "<" matches these operands
     operand types are: float < std::complex<float>
  d = abs(sigma) < tools::epsilon<T>() ?
                 ^
      detected during:

我正在使用启用了C ++ 11的Intel 2013编译器。

我在这里做错了什么?

作为一个附带问题,看一下该函数的boost文档,我注意到了这个令人不安的一点:

  

每当结果出现时,函数都会返回domain_error的结果   未定义或复杂。

这是否意味着当给定复杂的输入时(可以想象复杂输出的可能性),复杂结果的函数也会失败?

编辑: 深入挖掘,问题是std :: complex类型没有&gt;或者&lt;运营商。这有点有道理,因为质疑一个复数是否大于另一个(一个是数量级,真实组件,虚数等等),这有点模棱两可。)

因此,似乎虽然bessel函数是针对复杂输入定义的,但boost本身并不支持bessel函数的复杂输入。看来文档对此有点误导。

0 个答案:

没有答案