我正在尝试用以下形式求解方程组:
a5 + a6 + a7 + f5 + f6 + f7 = 11;
b5 + b6 + b7 + e5 + e6 + e7 = 100;
c5 + c6 + c7 + d5 + d6 + d7 = 100;
a5 + b5 + c5 + d5 + e5 + f5 = 11;
a6 + b6 + c6 + d6 + e6 + f6 = 100;
a7 + b7 + c7 + d7 + e7 + f7 = 100;
其中所有变量和数字都是二进制文件。
有没有办法在 Matlab 中做到这一点?
例如,通过将二进制数替换为十进制值:
a5 + a6 + a7 + f5 + f6 + f7 = 3;
b5 + b6 + b7 + e5 + e6 + e7 = 4;
c5 + c6 + c7 + d5 + d6 + d7 = 4;
a5 + b5 + c5 + d5 + e5 + f5 = 3;
a6 + b6 + c6 + d6 + e6 + f6 = 4;
a7 + b7 + c7 + d7 + e7 + f7 = 4;
并以某种方式告诉 Matlab,未知数应该是整数并且来自区间 [0:1]?
这是 A x = b 形式:
A = [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1;
0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0;
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0;
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0;
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0;
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1];
b = [3 4 4 3 4 4];
那么下一步会是什么?
bintprog,如果你有优化工具箱的话。
由于可能有多个解决方案,我将选择总和最小的解决方案。
>> A = [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1;
0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0;
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0;
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0;
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0;
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1];
>> b = [3 4 4 3 4 4];
>> bintprog(ones(1,18),[],[],A,b)
Optimization terminated.
ans =
0
1
1
1
1
1
1
1
1
1
0
0
0
0
1
0
1
0