matlab里线性规划,Matlab 中的数学建模算法 —— 线性规划函数
matlab里线性规划,Matlab 中的数学建模算法 —— 线性规划函数
我参加了 2019 年的数学建模比赛,所以从现在到开始的一段时间里,我都在学习如何使用 Matlab 中有关于数学建模的函数和工具。我的计划是每一天都学一个函数或者工具,然后更新在博客和公众号上面。
总共有五大部分,分别是:
1. 优化问题:其中有线性规划、非线性规划、整数规划、多目标规划、遗传算法;
2. 图论问题:其中有最短路问题、最小生成树、最大流、TSP 问题解法;
3. 数据分析:有拟合、插值、回归、降维中的主成分分析和因子分析、分类中的决策树和支持向量机、聚类中的 K 均值;
4. 决策方法;
5. 微分方程数值解;
这篇按顺序从线性规划开始讲:
1.1. 线性规划的标准形式
线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。
Matlab 中规定线性规划的标准形式为
第一个式子为目标函数,s.t. 式式是约束条件。其中 c 和 x 为 n 维列向量,A、Aeq 为适当维数矩阵,b、beq 为适当维数列向量。
1.2. linprog() 的使用
在 matlab 中,线性规划的函数为 linprog() ,有两种常用形式:
X = linprog(f,A,b,Aeq,beq,LB,UB,X0)
[X,FVAL]=linprog(f,A,b,Aeq,beq,LB,UB,X0)
返回的值 X 是向量 x 的值,FVAL 是目标函数的值,LB 和 UB 分别是变量 x 的下界和上界, 是 x 的初始值。
1.3. 应用例子
求下列线性规划问题:
依据 Matlab 的标准,默认求解是求最小值,而本例是求的最大值,把 z 的系数变为相反数,即 -1 就好了,同理下面的大于等于号也做同样处理,然后没有上界 UB,下界 LB 为三个变量都为 0,也就是一个全零的矩阵 zeros(3, 1)
编写一个 .m 文件:
执行后输出最优解和目标函数在最优解的取值: