EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab真的很强大,优化都方便了很多 先说说linprog的使用吧: min f'x
8 k: K' ~. a% h( J约束条件: Ax<=b5 u) P3 j: m3 p1 F e
等式约束条件: Aeqx=beq
5 r. G" K% e6 f3 M, Y5 T- K; ~/ O% k3 ]. Zlb<=x<=ub2 I; P2 n# N7 q. G: f0 v2 t
linprog函数的调用格式如下:& q7 ^4 o! c3 r+ R! _
linprog中f都是求最小值,这个要记住。
+ e! H/ C2 }$ F8 p3 ^& K, CA和b是不等式约束条件的参数。
' r; R7 F% _* C# L' ?Aeq和beq是等式约束条件的参数。 M; |: t7 s' [( r: X) d, }
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(…)
# I% J, \7 [6 ?* A
) l4 J( h( i% y- k' R. H3 ?一般主要用的是: - x=linprog(f,A,b,Aep,beq,lb,ub);
" s, j' v$ F3 x* I7 T 3 }( e8 c5 g Z$ e) I' V
设定中主要要注意的就是参数的维数是否于使用的相对应。举个例子吧: 生活中最常用的:假如有三种商品,a,b,c。三种商品总的数量不能超过30;c种商品不能超过15,b种商品不能超过10。 商品的单价是10,20,30。现在求三种商品各是多少,销售额最高。 转化为数学问题: 条件: a+b+c<30 c<15 b<10* ~! K' a n3 S+ c* M
函数: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]
0 s4 A% S/ d8 L- X1 K Q/ O' Y
! L$ f8 p+ d, k3 D' L, i7 z* R$ c但这样算出来的结果大家会发现是小数,也可能是负数。 因此我们加入a b c取值的上下限 - lb = [0 0 0]
- ub = [30 30 30]
6 f4 ?. p+ G' G' J8 }9 Q
: f' E3 c2 S$ n4 n2 M/ z如果在计算中需要得到小数的结果,只要写成0.00或者30.00就可以了最后带入函数计算就可以了
. E9 [8 E- i' d, @ |