高斯消除置换矩阵

时间:2015-06-23 10:20:12

标签: matlab matrix

我有一个大小为600 * 1200的二进制稀疏矩阵 H ,它是通过连接大小为200的平方置换矩阵构造的,因此稀疏矩阵在每列中有3个,每行有6个。现在我正试图将矩阵转换为减少的梯队形式。 这是我的代码:

    [m,n]=size(H);

for i=1:m 
    ind=find(H(:,i),1,'last');

    if ind<=i
        continue;
    end
    if ind~=i
        temp=H(ind,:);
        H(ind,:)=H(i,:);
        H(i,:)=temp;
    end
    I=find(H(:,i));
    % Guassian elimination
    for j=1:length(I)
        if I(j)~=i
            H(I(j),:)=mod(H(I(j),:)+H(i,:),2);
        end
    end
end

但无论生成 H 矩阵,我都无法在第400列删除其他条目,

我该如何解决这个问题,帮助

1 个答案:

答案 0 :(得分:1)

由于高斯消元不涉及列的重新排列,如果原始矩阵的前600列是线性无关的,则得到的矩阵的前600列将仅形成单位矩阵。否则,你将有&#34;短&#34;其中包含其他条目的列,如the Wikipedia article所示。

矩阵的结构方式,前400列保证与线性相关。实际上,前200列的总和是全1矢量,列201-400的总和也是如此。这就是您在第400列中看到这些条目的原因。

要在左侧创建单位矩阵,您需要重新排列列。一种看起来有点多余但很容易编码的方法是

  1. 运行您的算法
  2. 重新排列列(在rref之后很容易识别所需的列)
  3. 再次做rref。
  4. 以下是执行步骤2-3的代码。

    for i = 1:m
        j = find(H(i,:),1,'first');
        [H(:,i), H(:,j)] = deal(H(:,j), H(:,i));
    end
    H = rref(H)
    

    输入到rref的样本:

     1     0     1     0     1
     0     1     0     0     1
     1     0     1     1     0
     0     0     0     0     1
    

    输出您的代码:

     1     0     1     1     0
     0     1     0     0     1
     0     0     0     1     1
     0     0     0     0     1
    

    列交换后和第二个rref:

     1     0     0     0     1
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0