初入Matlab——linprog基本应用

Posted mrs-up

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初入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表示正无穷。

(5)c,x,b,beq,lb,ub是向量,A和Aeq是矩阵

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=[] 这样的条件。

 

参考链接:

https://www.cnblogs.com/goodtwo/p/11141969.html

https://blog.csdn.net/luolang_103/article/details/80202370

 

以上是关于初入Matlab——linprog基本应用的主要内容,如果未能解决你的问题,请参考以下文章

初入AngularJS基础门

Matlab2016b线性规划函数linprog的几个问题

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数