1

我有一个二进制矩阵 A(只有1和),以及伽罗瓦域中0的一个向量(256)。D向量C计算如下:

  C = (A^^-1)*D

其中表示矩阵inA^^-1的逆矩阵,是乘法运算。结果向量必须在. 我试图在 Matlab 中做到这一点。AGF(2)*CGF(256)

A= [ 1     0     0     1     1     0     0     0     0     0     0     0     0     0;
     1     1     0     0     0     1     0     0     0     0     0     0     0     0;
     1     1     1     0     0     0     1     0     0     0     0     0     0     0;
     0     1     1     1     0     0     0     1     0     0     0     0     0     0;
     0     0     1     1     0     0     0     0     1     0     0     0     0     0;
     1     1     0     1     1     0     0     1     0     1     0     0     0     0;
     1     0     1     1     0     1     0     0     1     0     1     0     0     0;
     1     1     1     0     0     0     1     1     1     0     0     1     0     0;
     0     1     1     1     1     1     1     0     0     0     0     0     1     0;
     0     0     0     0     1     1     1     1     1     0     0     0     0     1;
     0     1     1     1     1     0     1     1     1     0     1     1     1     0;
     0     0     0     1     0     0     0     1     0     0     0     0     0     0;
     0     0     1     0     0     0     0     1     0     0     0     0     0     0;
     1     1     1     1     0     0     0     0     0     0     0     0     0     0]

D=[0;0;0;0;0;0;0;0;0;0;103;198;105;115]
A=gf(A,1);
D=gf(D,8); %%2^8=256
C=inv(A)*D
%% The corrected result must be
%%C=[103;187;125;210;181;220;161;20;175;175;187;187;220;115]

但是,对于上面的代码,我无法达到我的预期结果

C=[103;187;125;210;181;220;161;20;175;175;187;187;220;115]

它产生一个错误

Error using  *  (line 14)
Orders must match.

你能帮我达到我的预期结果吗?

4

2 回答 2

6

错误

使用 * 时出错(第 14 行)
订单必须匹配。

出现是因为 Matlab 不支持将标准数学运算(+*.*.^\等)应用于不同阶的伽罗瓦域,GF(2)并且GF(256). 逆运算inv(A)是一个有效的运算,如果您按照@Ander Biguri 所示自行执行它,它将成功生成in的逆运算。当您尝试乘法并且这些伽罗瓦域的顺序不匹配时,您的计算就会失败。AGF(2)inv(A)D

在这个例子中,没有必要明确定义A为 2 阶的伽罗瓦域,GF(2)因为 中的乘法GF(256)发生在 中GF(2)。那就是1 + 1 = 0

如果我们因此修改创建伽罗瓦域的A代码

A = gf(A, 8);

然后我们可以执行

C = inv(A)*D

产生

C = GF(2^8) array. Primitive polynomial = D^8+D^4+D^3+D^2+1 (285 decimal)

Array elements = 

         103
         187
         125
         210
         181
         220
         161
          20
         175
         175
         187
         187
         220
         115

C因此在GF(256)其中并产生了预期的结果。

于 2015-11-04T18:10:48.227 回答
3

似乎也有

A)您的计算中的理论错误或

B) MATLAB 不支持的东西。

根据伽罗瓦域算术中的文档(强调我的):

部分概述。您可以使用下表列出的熟悉的 MATLAB 运算符对 Galois 数组执行算术运算。 每当您对一对 Galois 数组进行操作时,两个数组都必须 在同一个 Galois 域中。

而你的矩阵不是。

我不知道是哪一个,因为我不知道伽罗瓦域是如何工作的

于 2015-11-04T17:45:38.900 回答