[英]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.