云昴(Mao Yun)

Matlab优化函数linprog的使用

| 【专业·学习】Matlab

1. 什么是linprog

linprog函数是用来求解线性规划问题,其中,$ f,x,b,beq,lb,ub $ 为向量,$A,Aeq$为矩阵。

2.一些实例

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);

3.具体的例子

生活中最常用的:假如有三种商品,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就可以了 最后带入函数计算就可以了.

云昴(Mao Yun)