根据 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 的修改后的贝塞尔函数实现用于 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 本身似乎不支持贝塞尔函数的复数输入。似乎文档对此有点误导。