这个实际上就是高中学习过的内容了,不同的是我们需要在matlab上实现它。
下面基本上都用的向量和矩阵来描述了。
假设我们要求
z=ax1+bx2+cx3
那么z可以描述为
z=fTx
,
f=[a,b,c],x=⎡⎣⎢x1x2x3⎤⎦⎥
然后就是会有一系列的约数条件,让你求z的max或min
这里在matlab里有一个专门函数即linprog来求解线性问题,为了统一描述,linprog只求 zmin ,
设约束条件不等关系描述为
A∙x<=b
同样是统一描述是小于等于
等号关系为
Aeq∙x=beq
x的范围描述为
lb<=x<=ub
则linprog的命令为:
[x,y]=linprog(f,A,b,Aeq,beq,lb,ub);//详情输入help linprog,x是向量,y是所求的最值
如求min
z=2x1+3x2+x3
约数:
x1+4x2+2x3>=8
3x1+2x2>=6
x1,x2,x3>=0
代码:
f=[2;3;1];
a=[ -1 -4 -2
-3 -2 0];
b=[-8,-6];
[x,y]=linprog(f,a,b,[],[],zeros(3,1));
x,y