求解奇异稀疏矩阵 MATLAB

Solving singular sparse matrix 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) 描述的索引将指向矩阵维度之外并给我一个错误。 我可以做些什么来解决这个问题?

您可以先按照现有的方式构建矩阵,然后使用以下方法删除空行和空列

C = B(any(B, 2), any(B, 1));

这是非常有效的(space-wise),因为 any 应用于稀疏矩阵会产生稀疏结果,并且上面的索引操作会产生 C稀疏

不过,根据您的问题,这不能保证非奇异矩阵。

更新

如果你想删除行和对应列都为零的行或列(以保持你的矩阵正方形)

tokeep = any(B, 2).' | any(B, 1);

C = B(tokeep, tokeep);

可能的解决方案

row = [1,3];
col = [1,3];
val = [22,33];
[ur,~,u_row] =  unique(row);
[uc,~,u_col] =  unique(col);
B =sparse( u_row,u_col,val,numel(ur),numel(uc));