本博文源于matlab基础,主要对线性规划中linprog使用感兴趣,恰好下午刚刚体会了一把,写了这篇博文。怎么使用刚开始我也觉得懵,但是随着例子铺开,学会套用复制就一点点理解了。话不多说,先看例子:
例子1:甲厂乙厂生产机器问题
模型
学过数学建模的人知道,列出这个模型就是设甲为x1,乙为x2。然后把题目中公式列出,得到下面结果。
故事讲到这里大家就开始嘀咕了,这可怎么算呀。下面进入matlab公式套、套、套环节
matlab线性规划linprog函数
这里有两张图,第一张图看不懂不要紧,我们先看第二张图。知道这个更沥青。培训过的同学都明白,线性规划:目标函数,决策变量,约束条件三者要齐全。在linprog函数中
- c 是目标函数形成的矩阵,比如max z=2x1+3y1,表述就是c=[2;3]
- A,b 是约束条件不等式的系数,比如例1中,A=[2,1;1,1;0,1],b=[10;8;7].大家对比一下图片就能明白
- Aeq,beq对应的是线性等式约束
- lb,ub分别对应的是决策向量的下界和上界
很明显题目中没有等式约束,那怎么表示呢,而且matlab必须要有等式约束哟,那就用[]表示,因此最终代码为:
matlab函数求解
>> f=[-4;-3];
a=[2,1;1,1;0,1]; b=[10;8;7];
aeq=[1,1,1];
[x,y]=linprog(f,a,b,[],[],zeros(2,1));
x, y=-y
Optimization terminated.
x =
2.0000
6.0000
y =
26.0000
>>
为了方便大家理解,再做一道普通的题目。慢慢尝试去套,然后往里面放matlab公式,求解收获喜悦。
例子2:求解下列线性规划的解(MATLAB)
程序
>> f=[-2;-3;5];%matlab默认做最小值优化,因此加负号
a=[-2,5,-1;1,3,1]; b=[-10;12];%模拟Ax<=b,这里是A的input,b的input
aeq=[1,1,1];%模拟等式约束
beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));%求解函数使用
x, y=-y
Optimization terminated.
x =
6.4286
0.5714
0.0000
y =
14.5714