在matlab中求解二元线性方程组

时间:2015-07-14 15:16:17

标签: matlab binary

考虑形式x*A = b的二元线性方程。我想解决 x ,效率方法是避免使用x = b*inv(A)而是使用x= b/A。但是使用此命令结果不是二进制形式。我尝试了命令x = mod(b/A ,2),但结果仍然不是二进制文件。如何解决这个问题?

示例 `

x = 1     0     1     1     0     0     0     1     1     0`

和矩阵A是

`0     1     0     1     0     0     1     1     1     1
 0     1     1     1     1     1     1     1     0     1
 0     0     1     0     1     1     0     1     1     1
 1     0     0     1     1     1     1     1     1     1
 1     1     0     0     1     1     0     0     0     0
 0     1     1     1     0     1     1     0     1     0
 0     0     1     1     0     0     0     1     0     0
 1     1     1     1     0     1     0     1     1     1
 1     0     1     0     1     1     1     0     1     1
 1     1     1     0     0     0     1     1     0     0`

which is full rank.

然后

>> b = mod (x*A,2)

b =

 1     0     1     1     1     0     1     0     1     1

要查找x,我正在

>> k = b / A

k =

第1至6栏

1.3750   -0.5000   -0.7500   -0.7500    0.8750   -0.5000

第7至10栏

1.8750   -0.5000    2.1250   -0.7500

或者如果使用模数2,结果是

>> k = mod (b / A,2)

k =

第1至6栏

1.3750    1.5000    1.2500    1.2500    0.8750    1.5000

第7至10栏

1.8750    1.5000    0.1250    1.2500

那么,我怎样才能以相同的二进制形式获得x?顺便说一下,矩阵都是 class double 而不是 galois field

2 个答案:

答案 0 :(得分:2)

Mathworks的这个例子展示了如何用MATLAB执行布尔矩阵求逆,我相信你的问题可以解答。

我还没有完全正常工作,但我相信您需要使用mod()logical()的组合,例如:

A=logical(A);
b=(mod(x*A,2));
inverseA= ~A;
k=mod(b*inverseA,2)

这给出了

k=[1 1 0 0 1 1 0 1 0 0]

这不是x,但我认为如果您使用logical函数和逻辑运算与mod()一起使用,您应该可以使其工作

答案 1 :(得分:0)

要以二进制形式求解x,矩阵 A 应该在galois字段中。 考虑以下示例;

>> x = randi ([0 1],1,10)

x =

 1     1     0     1     1     1     0     1     1     1

>> A = gf (randi([0 1],10,10))

A = GF(2)阵列。

数组元素=

第1至6栏

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

第7至10栏

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

然后,

>> b = x*A

b = GF(2)数组。

数组元素=

第1至6栏

       1           0           1           1           0           1

第7至10栏

       0           1           0           1

>> x_solved = b*inv (A)

x_solved = GF(2)数组。

数组元素=

第1至6栏

       1           1           0           1           1           1

第7至10栏

       0           1           1           1

如您所见 x_solved 与原始 x 相同。因此,您只需运行代码A即可将矩阵A = gf(A)转换为galois字段。