Matlab真的很强打,优化都方便了很多
先说说linprog的使用吧:
min f'x
约束条件: Ax<=b
等式约束条件: Aeqx=beq
lb<=x<=ub
linprog函数的调用格式如下:
linprog中f都是求最小值,这个要记住。A和b是不等式约束条件的参数
Aeq和beq是等式约束条件的参数
lb和ub为x取值的取值范围。
函数使用形式:
x=linprog(f,A,b) x=linprog(f,A,b,Aeq,beq) x=linprog(f,A,b,Aeq,beq,lb,ub) x=linprog(f,A,b,Aeq,beq,lb,ub,x0) x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) [x,fval]=linprog(…) [x, fval, exitflag]=linprog(…) [x, fval, exitflag, output]=linprog(…) [x, fval, exitflag, output, lambda]=linprog(…)
一般主要用的是:
x=linprog(f,A,b,Aep,beq,lb,ub);
设定中主要要注意的就是参数的维数是否于使用的想对应。
举个例子吧:
生活中最常用的:假如有三种商品,a,b,c。三种商品总的数量不能超过30;c种商品不能超过15,b种商品不能超过10。
商品的单价是10,20,30。现在求三种商品各是多少,销售额最高。
转化为数学问题:
条件:
a+b+c<30
c<15
b<10
函数:f = 10*a+20*b+30*c
因为linprog求的是最小值,一次我们改为:f = -(10*a+20*b+30*c)
这样我们有了函数,然后:
根据约束条件不等式,有:
A = [1 1 1;0 0 1;0 1 0] b = [30 15 10]
但这样算出来的结果大家会发现是小数,也可能是负数。
因此我们加入a b c取值的上下限
lp = [0 0 0] up = [30 30 30]
如果在计算中需要得到小数的结果,只要写成0.00或者30.00就可以了
最后带入函数计算就可以了
写完后发现例子挺水的(自己编的),同志们见谅吧,水平有限。