Матричная инверсия библиотеки шаблонов матриц

Пытаюсь инвертировать матрицу с версией Boost boost_1_37_0 и MTL mtl4-alpha-1-r6418. Я не могу найти код инверсии матрицы. Я гуглил примеры, и они, кажется, ссылаются на lu.h, который, кажется, отсутствует в вышеуказанных выпусках. Любые подсказки?

@Matt предложил скопировать lu.h, но, похоже, это из MTL2, а не из MTL4. У меня проблемы с компиляцией MTL2 с VS05 или выше.

Итак, есть идеи, как сделать инверсию матрицы в MTL4?

Обновление: я думаю, что лучше понимаю Мэтта, и я иду по этому пути ITL .


person kenny    schedule 03.12.2008    source источник


Ответы (3)


Похоже, вы используете lu_factor, а затем lu_inverse. Я не помню, что вы должны сделать с стержнями, хотя. Из документации.

И да, как вы сказали, похоже, что в их документации сказано, что вам как-то нужно lu.h:

Как инвертировать матрицу?

Первый вопрос, который вы должны задать себе, заключается в том, хотите ли вы действительно вычислить обратную матрицу или действительно хотите решить линейную систему. Для решения линейной системы уравнений нет необходимости явно вычислять обратную матрицу. Скорее, более эффективно вычислять треугольные коэффициенты матрицы, а затем выполнять прямое и обратное треугольное решение с коэффициентами. Подробнее о решении линейных систем читайте ниже. Если вы действительно хотите инвертировать матрицу, в mtl/lu.h есть функция lu_inverse().

Если ничего другого, вы можете посмотреть lu.h на их сайте.

person Matt Cruikshank    schedule 03.12.2008
comment
Спасибо. Да, я как раз пытаюсь сделать/портировать lu.h, который я нашел, но, похоже, это другая версия, и мой линейный ал довольно ржавый. - person kenny; 03.12.2008

Я никогда не использовал boost или MTL для матричной математики, но я использовал JAMA/TNT.

Эта страница http://wiki.cs.princeton.edu/index.php/TNT показывает, как взять обратную матрицу. Основной метод не зависит от библиотеки:

  1. факторизовать матрицу M в XY, где X и Y являются соответствующими факторизациями (LU будет в порядке, но для численной стабильности, я думаю, вы захотите использовать QR или, возможно, SVD).

  2. решить I = MN = (XY)N для N с предпосылкой, что M было факторизовано; в библиотеке должна быть процедура для этого.

person Jason S    schedule 10.12.2008

В MTL4 используйте это:

mtl::matrix::inv(Matrix const &A, MatrixOut &Inv);

Вот ссылка на API.

person Szymon Wygnański    schedule 04.10.2012