﻿功能:线性规划(采用正则形法求解)

格式:
[Maxf,xv] = LineProg(f,c,x,down,up)
[Maxf,xv] = LineProg(f,c,x,down)
[Maxf,xv] = LineProg(f,c,x)

f:符号变量,里面存储目标函函数的表达式(最大值)
c:符号变量,里面存储约束条件,注意约束条件当中可以使用"≤"、"<="、"=<"、"<"、"≥"、">="、"=>"、">"、"="其中"≤"、"<="、"=<"、"<"均等价,表示小于等于；其中"≥"、">="、"=>"、">"均等价,表示大于等于.每个约束条件之间使用逗号分隔.其中每个约束条件只能有1个判断符，如"1<=x1+x2*3<=x5"这种条件是要保报错的,这时可分开写成"1<=x1+x2*3,x1+x2*3<=5"
x:符号变量,存储各个变量的名称,每个名称以逗号分隔
down:数值或者矩阵变量,其表示x变量里对应的下限值,默认为0,你x里每个变量均大于等于0。注意此下限值不能取无穷
up:数值或者矩阵变量,其表示x变量里对应的上限值,默认为正无穷即 inf ,注意此上限值不能取负无穷

Maxf:返回的最大值
xv  :返回对应x的取值

说明:
1. 如果你的条件中限制为 x>=-3 这个时候一定要在第4个参数down里进行设置,因为默认参数x>=0 .当然如果你条件中 x>=3 则可设置可不设置第4个参数。但是进行近亲设置效率会更高(小范围感觉不出来)
2. 函数内部使用单纯形法进行求解.
3. 如果想直接使用系数输入进行求解,可以使用{QuadProg<矩阵运算\QuadProg>}函数
4. 如果要更加灵活求解,可参考{线性规划求解<备用文件\vbLineProg>}

例子:

/*以Beale问题为例
求如下目标函数的最大值
f=0.75*x1-20*x2+0.5*x3-6*x4

其约束条件如下
0.25*x1-8*x2-x3+9*x4≤0
0.5*x1-12*x2-0.5*x3+3*x4≤0
x3≤1
x1>=0,x2>=0,x3>=0,x4>=0
*/

//依次执行如下4条命令后将得到存储到a变量当中的结果,注意c、x变量中逗号分隔的意义

f = "0.75*x1-20*x2+0.5*x3-6*x4";
c = "0.25*x1-8*x2-x3+9*x4<=0,0.5*x1-12*x2-0.5*x3+3*x4≤0,x3<=1";
x = "x1,x2,x3,x4";
[mf,x0]=LineProg(f,c,x)//回车得到如下结果,即目标最大值为1.25,此时最优解为x1=1,x2=0,x3=1,x4=0
mf =
[ 1.25000000000000 ]
x0 =
[ 1.00000000000000    0.00000000000000    1.00000000000000    0.00000000000000 ]

//修正于2014/11/26