Я пишу программу с Armadillo C ++ (4.400.1)
У меня есть матрица, которая должна быть разреженной и сложной, и я хочу вычислить обратную величину такой матрицы. Так как оно редкое, оно может быть псевдообратным, но я могу гарантировать, что матрица имеет полную диагональ.
В документации API Armadillo упоминается метод .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
тип.
Поддержка разреженных матриц в Armadillo не завершена, и многие из факторизаций / сложных операций, которые доступны для плотных матриц, недоступны для разреженных матриц. Для этого есть ряд причин, главная из которых заключается в том, что эффективные сложные операции, такие как факторизации для разреженных матриц, все еще остаются открытой областью исследований. Итак, нет .i()
функция доступна для cx_sp_mat
или другой sp_mat
типы. Другой причиной этого является нехватка времени со стороны разработчиков разреженных матриц (… включая меня).
Учитывая, что инверсия разреженной матрицы, как правило, будет плотной, тогда вам лучше просто повернуть cx_sp_mat
в cx_mat
а затем использовать те же методы инверсии, которые вы обычно применяете для плотных матриц. Так как вы все равно планируете представлять это как плотную матрицу, то вполне вероятно, что у вас достаточно оперативной памяти для этого.