2014-11-01 2 views
3

Я пишу программу с Armadillo C++ (4.400.1)Armadillo комплекс разреженная матрица, обратная

У меня есть матрица, которая должна быть редкими и сложными, и я хочу, чтобы вычислить обратную такой матрицы. Поскольку он разрежен, он может быть псевдообратным, но я могу гарантировать, что матрица имеет полную диагональ.

В документации API из Армадилло, он упоминает метод .i() для вычисления обратной матрицы любой, но sp_cx_mat члены не содержат такой метод, а inv() или pinv() функции не могут справиться с sp_cx_mat типа, по-видимому.

sp_cx_mat Y; 

/*Fill Y ensuring that the diagonal is full*/ 

sp_cx_mat Z = Y.i(); 

или

sp_cx_mat Z = inv(Y); 

Ни один из них не работает.

Я хотел бы знать, как вычислить обратную матрицу типа sp_cx_mat.

+0

Каковы размеры? X * X или X * Y? – Surt

+0

Матрица квадратная, поэтому X на X –

+0

Обратный к разреженной матрице не обязательно разрежен. Вам действительно нужно обратное к разреженной матрице? Вся литература, которую я видел после быстрого поиска, рекомендует решить основную проблему по-другому. То есть используйте итерационные методы (или другие) для решения Ax = b. – Unapiedra

ответ

2

Резервная матричная поддержка в Armadillo не является полной, и многие из факторизаций/сложных операций, доступных для плотных матриц, недоступны для разреженных матриц. Для этого существует целый ряд причин, самый большой из которых заключается в том, что эффективные комплексные операции, такие как факторизация для разреженных матриц, по-прежнему являются очень открытой областью исследований. Таким образом, нет функции .i() для cx_sp_mat или других типов sp_mat. Другая причина для этого - нехватка времени со стороны разреженных матричных разработчиков (... меня).

Учитывая, что обратная разреженной матрицы, как правило, будет плотным, то вы можете просто быть лучше превращая ваш cx_sp_mat в cx_mat, а затем, используя те же методы инверсии, что вы нормально для плотных матриц. Так как вы все равно представляете это как плотную матрицу, то справедливое предположение, что для этого достаточно оперативной памяти.

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