在《matlab解决有约束的二次规划问题》中,提到了线性规划问题(linear programming),而线性规划问题实际与二次规划问题十分相似,现在在matlab中实现求解
这是用于求解问题的linprog()函数文档
同样使用一个例子说明这个函数的调用方法
【例】求解如下线性规划问题
【分析】对比帮助文档,需要将目标函数和约束条件分别表示成这样的格式:
表示出这个式子中的各个矩阵即可
1.目标函数的表示
与线性代数课中所学的一样,用一个列矩阵f表示表示各个一次项的系数,即
2.约束条件的表示
由于约束条件中不含等式,所以Aeq与beq全为空 Aeq=[] , beq=[]
A是前三个约束条件的左边部分,表示为
b是前三个约束条件的右边部分,表示为
lb表示变量的下限,使用这个式子表示第四个约束条件
3.带入程序中进行计算
查看linprog的帮助文档,根据调用格式使用linprog函数
>> f=[-5;-4;-6];
>> A=[1 -1 1;3 2 4;3 2 0];
>> b=[20;42;30];
>> lb=[0;0;0];
>> [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
最后一行不打分号,方便显示结果
产生结果如下:
Optimal solution found.
x =
0
15.0000
3.0000
fval =
-78
exitflag =
1
output =
包含以下字段的 struct:
iterations: 3
constrviolation: 0
message: 'Optimal solution found.'
algorithm: 'dual-simplex'
firstorderopt: 1.7764e-15
lambda =
包含以下字段的 struct:
lower: [3×1 double]
upper: [3×1 double]
eqlin: []
ineqlin: [3×1 double]
成功完成!