赞
踩
在校学习数学建模,整理的matlab相关笔记,按照学校授课时间顺序发布相关内容,做这个的初衷是为了方便自己学习,所以有些地方以教材为主,大家不要见怪。
希望能在这里分享学习的一些知识碎片,接触时间不长,如果文章有任何错误,欢迎大家指正。
如果喜欢我的文章还请大家不吝动手给我点赞收藏关注哦,留下你来过的足迹,让我眼熟你。
目录
1.模型: minz=cX
s.t. AXb
命令: x=linprog(c,A,b)
2. minz=cXc
s.t. AXb
Aeq*X=beq
命令: x=linprog(c,A,b,Aeq,beq)
或 x=linprog(c,A,b,Aeq,beq,x0)
或 [x,fval]=linprog(c,A,b,Aeq,beq)
若没有不等式约束Axb,则令 A=[ ],B=[ ]
3. VLBXVUB
命令: X=linprog(c,A,b,Aeq,beq,VLB,VUB)
若没有等式约束Aeq·x=beq,则令 Aeq=[ ],beq=[ ]
4. [x,fval]=linprog(...)
返回最优解x及x处的目标函数值fval
例:
s.t.
注意:matlab中只能识别小于等于,大于等于可以用负号来编写
- % 编写M文件xxg1.m如下:
- c = [6 3 4];
- A = [1 2 -3;0 1 0];
- b = [80;50];
- Aeq = [1 1 1];
- beq = [120];
- vlb = [30;0;20;];
- vub = [ ];
- [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
模型: 程序:
Min min=7*x1+3*x2;
x1+x2>=345.5;
x1>=98;
2*x1+x2<=600;
@gin(x1);
为整数 @gin(x2);
end
注意:等号、乘号、分号、说明
变量界定函数实现对变量取值范围的限制,共4种
默认情况下,LINGO规定变量是非负的,下界为0
例:一加工厂用牛奶生产A1,A2两种奶制品,1桶牛奶可以在甲车间12h加工成3kgA1,或者在乙车间用8h加工成4kgA2.根据市场需求,生产的A1,A2全部能售出,且每千克A1获利24元,每千克获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间为480h,并且甲车间每天至多能加工100kgA1,乙车间的加工能力没有限制,试为该厂制定一个生产计划,使每天获利最大,问:
建立模型
决策变量 每天用x1桶牛奶生产A1.x2桶牛奶生产A2
目标函数 Max z=72x1+64x2 (每天获利)
约束条件 x1+x250 原料供应
12x1+8x2480 劳动时间
3x1100 加工能力
x1,x20 非负约束
- Model:
- Max=72*x1+64*x2;
- x1+x2<=50;
- 12*x1+8*x2<=480;
- 3*x1<=100;
- end
生产计划为20桶牛奶生产A1,30桶牛奶生产A2,利润3360元。
Variable 变量 objective value 目标值 Row 行
Reduced Cost 缩减成本系数 (最优解中变量Reduced Cost值自动取0)
Slack or Surplus 松弛或剩余
对于“ ”不等式右边减左边的差值成为Slack
对于“ ”不等式右边减左边的差值成为Surplus
当约束条件的左右两边相等时,Slack or Surplus 的值为0
资源剩余为0的约束为紧约束(有效约束)
Dual Price 影子价格 最优解下“资源”增加一个单位时“效益”的增量
在这里代表原料增加一单位,利润增48
时间增加一单位,利润增2
能力增减不影响利润
35元可以买到一桶牛奶,35<48,要投资。付给临时工人的工资最多是每小时2元。
结果解释 (灵敏度分析)(Range)
Objective Coefficient Range 目标函数系数的变化范围
x1系数变化范围(64,96)
x2系数变化范围(48,72)
每千克A1获利增加到30元,64<30×3<96故不应改变生产计划。
Righthand Side Ranges 右边变化范围 INFINITY 无穷大
影子价格有意义时约束右端的允许变化范围 (目标函数不变)
注意:充分但可能不必要
在这里原料最多增加10,时间最多增加53
35元可买到1桶牛奶,每天最多买10桶牛奶。
- % 任务分配问题
- c = [13 9 10 11 12 8];
- A = [0.4 1.1 1 0 0 0
- 0 0 0 0.5 1.2 1.3];
- b = [800;900];
- Aeq = [1 0 0 1 0 0
- 0 1 0 0 1 0
- 0 0 1 0 0 1];
- beq = [400;600;500];
- vlb = zeros(6,1);
- vub = [ ];
- [x,fval] = linprog(c,A,b,Aeq,beq,vlb,vub)
- c = [40 36];
- A = [-5 -3];
- b = [-45];
- Aeq = [ ];
- beq = [ ];
- vlb = zeros(2,1);
- vub = [9;15];
- [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。