Есть класс, ведущий себя как число (элемент поля GF(256)).
Я пытаюсь обратить матрицу над этим полем, используя lu_factorize и lu_substitute (подсмотрел здесь http://savingyoutime.wordpress.com/2009/09/21/c-matrix-inversion-boostublas/ ).
lu_factorize отрабатывает без ошибок (хотя не уверен, что правильно, потому что руками не пересчитывал), но lu_substitute выбрасывает исключение в какой-то внутренней проверке:
Check failed in file /usr/include/boost/numeric/ublas/lu.hpp at line 294:
detail::expression_type_check (prod (triangular_adaptor<const_matrix_type, unit_lower> (m), e), cm1)
Если отключить проверки (#define BOOST_UBLAS_TYPE_CHECK 0), то исключение не выбрасывается, но обратная матрица получается неверная.
Можно ли как-то добиться от него корректной работы? Или оно не предназначено не для вещественных чисел? С включёнными проверками оно требует от моего типа operator<, что меня сразу смутило, потому что его тут трудно определить естественным образом, и sqrt, который, в принципе, определить можно, но с отключенными не требует.
Или всё-таки легче написать своё обращение?