2008-12-03 13 views
3

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

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

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

Обновление: Думаю, я лучше понимаю Мэтта, и я направляюсь вниз this ITL path.

ответ

4

Похоже, вы используете lu_factor, а затем lu_inverse. Тем не менее, я не помню, что вы делаете с шарнирами. С documentation.

И да, как вы сказали, это выглядит, как их Документация говорит вам нужна lu.h, как-то:

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

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

Если ничего более, вы можете посмотреть lu.h on their site.

+0

Спасибо. Да, я нахожусь в середине того, что пытаюсь сделать/port lu.h Я нашел, но, похоже, это другая версия, и моя линейка al довольно ржавая. – kenny 2008-12-03 16:22:08

0

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

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

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

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

0

В MTL4 использовать это:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^