EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab真的很强大,优化都方便了很多 先说说linprog的使用吧: min f'x! n5 }% W/ v; x* X9 y3 G
约束条件: Ax<=b
# E, l3 M6 P: v' o( G' J7 e等式约束条件: Aeqx=beq! b9 h8 x: w9 [8 \; K
lb<=x<=ub4 N, Q+ ~% V* h% w$ i8 i w9 `
linprog函数的调用格式如下:
& O$ b# q4 g% @9 ?" T" o; slinprog中f都是求最小值,这个要记住。
0 p6 z8 D5 j$ f6 O5 b' ^+ m# DA和b是不等式约束条件的参数。$ ?' [+ A& x4 T. U, O
Aeq和beq是等式约束条件的参数。
* a8 [. b) h6 Y) @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(…) # q; c1 ]. x+ n; s0 q
4 S/ \5 q5 l$ {1 w5 K6 n
一般主要用的是: - x=linprog(f,A,b,Aep,beq,lb,ub); ! d3 A8 W' [- D% e% T- V5 Y, @( r: T
_( Q; b7 f4 M
设定中主要要注意的就是参数的维数是否于使用的相对应。举个例子吧: 生活中最常用的:假如有三种商品,a,b,c。三种商品总的数量不能超过30;c种商品不能超过15,b种商品不能超过10。 商品的单价是10,20,30。现在求三种商品各是多少,销售额最高。 转化为数学问题: 条件: a+b+c<30 c<15 b<10
7 R: P3 {# |3 O" u3 s# \1 V 函数: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] % W/ P6 k. D( B1 O
, B9 ^, t$ M, i; O$ {2 l+ p
但这样算出来的结果大家会发现是小数,也可能是负数。 因此我们加入a b c取值的上下限 - lb = [0 0 0]
- ub = [30 30 30] 6 v" G$ e" k" `/ G) Z9 i% g
6 Q5 [6 z+ e5 J9 |* M: Q! O/ N+ s如果在计算中需要得到小数的结果,只要写成0.00或者30.00就可以了最后带入函数计算就可以了
0 e t2 z' O* I |