我正在尝试在matlab中解决线性编程问题,输入是
[weights,~,flag]=linprog(f,[],[],C,b,0,10);
所以,根据手册,这应解决问题min f*x with the constraints C*x=b and 0<=x<=10
。因此x
的所有条目都应为正数。但是,我得到的解决方案包含否定条目(请参阅下面重现问题的示例)。我得到的标志是1,根据文档意味着该方法已经收敛。
我做错了什么?
这是输入
C =
19 20 18 20 18
3 3 4 5 3
1 1 1 1 2
1 1 1 1 1
和
b =
19
4
1
1
和
f =
1
1
1
1
结果是
weights =
84.1104
-62.8328
-41.5552
21.2776
-0.0000
答案 0 :(得分:2)
好的,我发现了问题:我认为下限和上限是标量,但它们是向量,为每个坐标指定它的上限和下限,因此调用函数的正确方法是
[weights,~,flag]=linprog(f,[],[],C,b,zeros(size(C,2),1,1),ones(size(C,2))*10);