⽋定矩阵求解matlab,在matlab中求解⽋定⽅程组
你所拥有的通常被称为integer-linear programming,并且已知它是NP难的(这意味着在解决⽅案出来之前不要屏住呼吸)。
如果你想在没有整数的情况下解决它,你有⼀个线性程序,因此可以使⽤linprog。如果您将未知矩阵视为未知条⽬的向量,则列总和仅为
col_sum = kron(eye(4),[1,1,1]);
col_sum =
1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1
同样,⾏和是
row_sum = repmat(eye(3),1,4);
row_sum =
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 0 1 0 0 1 0 0 1 0 0 1
这些是你的等式约束,你也有不等式约束,但只能绑定未知值。 linprog可以将它们绑定为额外的参数。但是你没有⼀个⽬标函数,你可以⽤它来组合所有未知数的总和,或者其中⼀个或任何其他线性⽬标可以做的事情,或者你可以把它留空,你得到任何可⾏的结果。
Aeq = [col_sum;row_sum]
beq = [2 6 6 1 5 7 3]';
X = linprog([],[],[],Aeq,beq,zeros(12,1),10*ones(12,1))% 0 <= vars <= 10
X = reshape(X,3,4)
X =
0.6550 2.0160 2.0160 0.3130
1.1192
2.5982 2.5982 0.6845
0.2258 1.3859 1.3859 0.0025
>> sum(X,1)
ans =
2.0000 6.0000 6.0000 1.0000
但是你没有>> sum(X,2)
ans =
5.0000
7.0000
3.0000
如果您确保某些条⽬保持为零等,那么所有解决⽅案都可能被强制为整数。否则,您需要具有⾮凸特定的整数编程解算器,例如given here