LINUX.ORG.RU

boost::ublas: обратить матрицу над своим типом

 ,


0

3

Есть класс, ведущий себя как число (элемент поля 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, который, в принципе, определить можно, но с отключенными не требует.

Или всё-таки легче написать своё обращение?


например. ublas на конечные поля не расчитан (во всяком случае, я не помню, чтобы он позволял с ними работать)

jtootf ★★★★★ ()
Ответ на: комментарий от jtootf

Мне от него нужно было всего только умножение матрицы на вектор и обращение. Просто другие компоненты буста уже используются, поэтому и хотелось использовать решение «из коробки». А так гораздо легче написать свою функцию, учитывая, что и писать там почти нечего, уже бы давно написал, если бы знал, что это не сработает.

Q3164 ()

На самом деле, у меня была ошибка в моём классе. Обращение просиходит нормально. Проверки, правда, не проходит, но обратная матрица получается правильной, так что их можно отключить.

Q3164 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.