Почему бы не повысить функцию бессела скомпилировать со сложным вводом?
Согласно документации наддува, функция бесселя специальных функций буста (в частности, модифицированная функция бесселя) должна быть в состоянии принять сложный ввод.
Тем не менее, когда я пытаюсь кормить его один, я получаю сообщение об ошибке компиляции, что нет <
оператор для типов операндов 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:
Я использую компилятор Intel 2013 с поддержкой C++11.
Что я здесь не так делаю?
В качестве дополнительного вопроса, глядя на документацию по бусту для функции, я заметил этот тревожный бит:
Функции возвращают результат domain_error, когда результат не определен или сложен.
Означает ли это, что функция также будет давать сбой для комплексных результатов при наличии сложного ввода (где можно было бы ожидать возможность сложного вывода)?
Редактировать: Копать глубже, кажется, проблема в том, что тип std::complex не имеет операторов> или <. Это в некоторой степени имеет смысл, поскольку несколько сомнительно, является ли одно комплексное число большим, чем другое (зависит от величины, реального компонента, мнимого? И т. Д.)
Таким образом, кажется, что, хотя функция bessel определена для сложных входов, само повышение не поддерживает сложные входы для функции bessel. Кажется, документация немного вводит в заблуждение.