Matrix Template Library матричная инверсия - PullRequest
3 голосов
/ 03 декабря 2008

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 03 декабря 2008

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

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

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

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

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

0 голосов
/ 04 октября 2012

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

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

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

0 голосов
/ 10 декабря 2008

Я никогда не использовал повышение или 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 было учтено; в библиотеке должна быть подпрограмма для этого.

...