提示:完成https://bbs.csdn.net/topics/603235722任务
前言
完成一道最大值的求解任务
提示:新手上路,如有不足请大佬们指正。
一、题目
二、分析及解答
1.定性
纯粹的线性分析问题
Z为目标函数
x1,x2,x3为决策变量
另外还有四个约束条件(注意第一个为等式!)
所以用linprog函数解决
代码如下(示例):
x = linprog(f,A,b) 求解 min f'*x 约束条件为 A*x ≤ b.
x = linprog(f,A,b,Aeq,beq) 求解上述问题,但是增加了约束条件,即将: Aeq*x = beq. 如果没有等式存在可以用:A = [] and b = []
x = linprog(f,A,b,Aeq,beq,lb,ub) 定义变量x的下界lb和上街ub,使得x始终在该范围内,即lb ≤ x ≤ ub。若没有约束条件,则设: Aeq = [] and beq = []
注意:max=cx min=-cx
2.MATLAB解决问题
代码如下(示例):
clc
clear all
c=[2 3 -5];%用目标函数系数来确定
a=[-2 5 -1;1 3 1];%约束条件左边约束
b=[-10;12];%约束条件右边系数
aeq=[1 1 1];%有等式约束
beq=[7];%等式只有一个
lb=[0;0;0];%下限为0
ub=[inf;inf;inf];%没有上限,因为只限制了x>0
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x %获取对应x1,x2
%或者你直接fval取绝对值也是一样
best=c*x%计算最优值
总结
这样就解决啦!虽然还没学过线性代数,不过还是早知道系数什么的,大家一起努力呀!
再给大家提醒下,matlab里求max,其实就是min=-cx( if min=cx ), 还有就是约束条件一定要调整为 ax+by<=n! 博主第一次两个坑都掉进去了嘤嘤嘤。