簡體   English   中英

求解奇異稀疏矩陣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列。

但是,如果我嘗試這樣做,行向量和col向量(3,3)所描述的索引將指向矩陣維之外,並給我一個錯誤。 我可以做些什么來解決這個問題?

您可以先按照自己的方式構造矩陣,然后使用以下命令刪除空的行和列

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

這是非常有效的(在空間上),因為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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM