【发布时间】:2015-11-04 16:57:42
【问题描述】:
我有一个二进制矩阵A(只有1 和0),以及一个向量D 在伽罗瓦域(256)。向量C计算如下:
C = (A^^-1)*D
其中A^^-1表示GF(2)中矩阵A的逆矩阵,*是乘法运算。结果向量C 必须在GF(256) 中。我尝试在 Matlab 中做到这一点。
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.
您能帮我达到预期的效果吗?
【问题讨论】:
-
注意:这与逆无关,仅与乘法有关。如果您将代码更改为
invA=inv(A); C=invA*D,错误将出现在最后一行。 -
@AnderBiguri 无论如何,错误都在最后一行。 OP 帖子中的错误应为问题中的代码
using *。 .* 和 * 的使用不影响最终结果或产生错误。
标签: matlab signal-processing communication linear-algebra galois-field