根据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函数的复杂输入。看来文档对此有点误导。