非常に長い投稿をお詫び申し上げます。次のコードでは、matlab とガウス消去法を使用して Ax=b を計算しています。自分の出力を実際に予想される出力と比較すると、出力は部分的に正しいです。私は実際にどこが間違っているのかわかりません。コードとサンプル マトリックスも含まれています。
[ grow, gcol ] = size(generator_matrix);
for i = 1 : grow - 1
if ( generator_matrix(i,i) == 0 )
t = min ( find ( generator_matrix(i+1:grow,i) ~= 0 ) + i );
temp = generator_matrix(i,:);
generator_matrix(i,:) = generator_matrix(t,:);
generator_matrix(t,:) = temp;
tb = encoded_data(i,:);
encoded_data(i,:)=encoded_data(t,:);
encoded_data(t,:) = tb;
end;
for j = i+1 : grow
m = -generator_matrix(j,i) / generator_matrix(i,i);
generator_matrix(j,i) = 0;
generator_matrix(j, i+1:grow) = generator_matrix(j, i+1:grow) + m * generator_matrix(i, i+1:grow);
encoded_data(j,:) = mod(encoded_data(j,:) + m * encoded_data(i,:),2);
end;
end;
x(grow,:) = encoded_data(grow,:) / generator_matrix(grow, grow);
for i = grow - 1 : -1 : 1
x(i,:) = mod(( encoded_data(i,:) - sum ( x(i+1:grow) .* generator_matrix(i, i+1:grow) ) ),2) / generator_matrix(i,i);
end;
サンプル値は次のとおりです。生成行列の値は次のとおりです。
[ 1 1 1 1
0 1 0 0
0 0 1 0
0 0 0 1]
エンコードされたデータの値
[ 1 1 1 1 0
0 0 0 0 1
0 1 1 1 0
0 0 1 0 0 ]
x の値は (ただし、現在取得している出力は以下の行列ではありません)
[1 1 1 1 0
0 0 0 0 1
0 1 1 1 0
0 0 1 0 0 ]
提案やヒントは非常に役立ちます。
20x20 の大きな行列のコードを実行しようとしましたが、正しい結果が得られません。バーヴィア