2

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

但是,当我尝试给它一个时,我得到一个编译错误,抱怨没有<操作数类型的运算符floatstd::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 的修改后的贝塞尔函数实现用于 0 阶、第一类修改后的贝塞尔函数。

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

我尝试将模板参数显式指定为<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 类型没有 > 或 < 运算符。这在某种程度上是有道理的,因为质疑一个复数是否大于另一个是有点模棱两可的(一个复数是大小,实部还是虚部?等等......)

因此,尽管贝塞尔函数是为复数输入定义的,但 boost 本身似乎不支持贝塞尔函数的复数输入。似乎文档对此有点误导。

4

0 回答 0