求解奇异稀疏矩阵MATLAB

时间:2016-12-05 18:41:21

标签: matlab sparse-matrix

我有一个庞大的稀疏矩阵,我正在研究,但为了简单起见,我在下面写了如下所示:

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列。

但是如果我试试这个,行和col矢量(3,3)描述的索引将指向矩阵维度之外并给我一个错误。 我可以做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以先按照自己的方式构建矩阵,然后使用以下内容删除空行和列

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

这是非常有效的(空间),因为应用于稀疏矩阵的any产生稀疏结果,并且上面的索引操作产生C,其稀疏< / p>

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

<强>更新

如果要删除行或列,如果行和相应的列都为零(以保持矩阵平方)

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

C = B(tokeep, tokeep);

答案 1 :(得分:0)

可能的解决方案

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));