初入Matlab——linprog基本应用
Matlab基本用法
1、矩阵:
(1)输入矩阵,如:A = [1,2,3;7,8,9],表示的是两行三列的矩阵,其中以逗号分隔相邻数字(空格也可以),以分号分隔行。
(2)单引号表示逆矩阵,即A‘
(3)若a=det(A),表示a为矩阵A的特征值。
2、每一行语句末尾加分好,回车即编辑下一条语句;若无分号,回车即运行程序。
linprog函数用法总结
1.简介
在matlab中,linprog函数可以求解线性规划问题,用于寻找目标函数的最小值,当要求max时取反(下面提到)。
matlab中,规划模型的标注写法如下
解释:
(1)c:目标函数的系数
(2)A:决策变量x的系数(不等式)
b:约束条件的不等号右边的常数
(3)Aeq:x在等式中的系数。若无等式,写成Aeq=[]即可。
beq:等式右端的常数。若无等式,写成beq=[]即可。
(4)lb:决策变量x的下界,也就是x能取到的最小值。若无下界,则写成-inf表示负无穷。
ub:决策变量x的上界,也就是x能取到的最小值。若无上界,则写成inf表示正无穷。
2.语法
2.1 x=linprog(c,A,b):
2.2 x=linprog(c,A,b,Aeq,beq)
2.3 x=linprog(c,A,b,Aeq,beq,lb,ub)
2.4 [x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
用法2.4和2.3一致,不同的是,这种写法会返回目标函数的值fval。其中x为所得到的最优解,fval为目标函数的最优数值。
3.应用
3.1 求最小
常见类型,网上挺多的。
3.2 求最大(举例说明)
问题分析:(1)linprog函数是求最小值的,max该如何求取?(2)目标函数没有x3,那么c中需要填写吗?(3)没有定义决策变量x3的范围,我们需要考虑吗?如何考虑?(4)该问题中没有等式的约束条件,还需要填写Aeq和beq吗?
代码结果:
>> c = [1,-1,0]; A = [-1,2,-3;2,1,-1]; b = [-6;5]; Aeq = []; beq = []; vlb = [0,0,-inf]; vub = [3,7,inf]; [x,fval]=linprog(-c‘,A,b,Aeq,beq,vlb,vub) Optimal solution found. x = 3 0 1 fval = -3
其中x的三个结果表示为x1x2x3,fval表示最优解
解答:(1)求max cx,即求min -cx,c还是照常写,max中是多少就是多少,至于为什么说了取反,c还照常写的原因是:后面linprog函数代入的是-c,即已取反。
(2)需要,要确定几变量,即使目标函数中没有也要写上0。
(3)只要有变量,都要考虑其取值范围。若无明确定义,即属于实数,属于负无穷到正无穷,表示为-inf和inf
(4)不管有无,都要写上。没有就以[]表示。
我的理解是:[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)中定义的东西,不管在实际问题里面是否定义,在我们敲代码的过程中,都要给其定义,所以一定要写上 Aeq=[] 这样的条件。
参考链接: