У меня есть большая разреженная матрица, что я работаю, но для простоты я написал ниже, как показано ниже:решения сингулярных разреженные матрицы MATLAB
row = [1,3];
col = [1,3];
val = [22,33];
B = sparse(row,col,val,3,3)
22 0 0
0 0 0
0 0 33
Этой матрица является особой и не имеет обратнога, что Я могу использовать для решения:
[A]=[B][C]
=>[B]\[A] = [C]
.
Чтобы исправить это, все строки и столбцы, содержащие только ноль, необходимо удалить. Итак, в приведенном выше примере я удаляю строки 2 и столбец 2, прежде чем создавать разреженную матрицу.
Но если я попробую это, индекс, описываемый векторами строк и столбцов (3,3), будет выведен за пределы размеров матрицы и даст мне ошибку. Что я могу сделать, чтобы решить эту проблему?
Разве это невероятно неэффективный метод при работе с крупными разреженными матрицами (1000000x1000000)? – Lobstw
@Lobstw Нет, потому что все промежуточные значения также «разрежены» – Suever
Благодарим вас за разъяснение. Однако это не приводит к ожидаемым результатам для случая, например: '[22 0 0; 44 0 0; 0 0 33]' 2-я строка не должна удаляться – Lobstw