EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab真的很强大,优化都方便了很多 先说说linprog的使用吧: min f'x
* j U/ u W$ l4 r约束条件: Ax<=b
; y6 m8 k0 I" [等式约束条件: Aeqx=beq/ k4 N! l1 g6 U6 V7 m
lb<=x<=ub
1 E7 A/ |/ K o& F0 r: I linprog函数的调用格式如下:
/ T( d) R$ B0 f7 P% Blinprog中f都是求最小值,这个要记住。+ h& q) g: ]8 Z* J' }- Z! {
A和b是不等式约束条件的参数。
( ^9 N4 V# C. N6 w e6 E% K9 t) k0 nAeq和beq是等式约束条件的参数。0 |4 D |# L4 w {6 Z: F
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(…) 6 c4 x% B' l H
* e( U3 K0 g4 M9 b. l9 K
一般主要用的是: - x=linprog(f,A,b,Aep,beq,lb,ub);
q* Z H4 m- h7 G1 D2 p: \
' T- h& f# Z+ J- D+ v2 N0 T设定中主要要注意的就是参数的维数是否于使用的相对应。举个例子吧: 生活中最常用的:假如有三种商品,a,b,c。三种商品总的数量不能超过30;c种商品不能超过15,b种商品不能超过10。 商品的单价是10,20,30。现在求三种商品各是多少,销售额最高。 转化为数学问题: 条件: a+b+c<30 c<15 b<104 a! }* [3 w, o" v, _+ N! U1 `! n
函数: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]
+ n o1 B* l# d% }. B! H ) h1 n9 m1 K% T1 u& ^! E/ C* p4 M
但这样算出来的结果大家会发现是小数,也可能是负数。 因此我们加入a b c取值的上下限 - lb = [0 0 0]
- ub = [30 30 30] 9 S5 K2 ?0 T+ q3 Q' a2 I6 c
) ]) l q' M0 h- v4 n! Q' ?- {0 p: Q如果在计算中需要得到小数的结果,只要写成0.00或者30.00就可以了最后带入函数计算就可以了 - l9 T% q ]% K6 Y5 W5 R
|