大学生数学建模大赛知识笔记
Matlab编程Part1
1.线性规划
线性规划:在一组约束条件下,选择合适的决策变量,求目标函数的最大或最小值(最优解)。
Matlab标准形式:
min c T x s . t . { A ⋅ x ⩽ b A e q ⋅ x = b e q l b ⩽ x ⩽ u b \min{\ \ c^Tx} \\ s.t.\left\{ \begin{array}{c} A\cdot x\leqslant b\\ Aeq\cdot x=beq\\ lb\leqslant x\leqslant ub\\ \end {array}\right. min cTxs.t.⎩
⎨
⎧A⋅x⩽bAeq⋅x=beqlb⩽x⩽ub
其中c和x为n维列向量,A,Aeq为矩阵,b,beq为适当维数列向量。
式子分别为不等式约束,等式约束,决策变量取值范围。
注:Matlab一般求最小值,如果求最大值可以在函数前加负号;约束条件只能为 ⩽ \leqslant ⩽号。
Matlab中求解线性规划的命令为:
[ x , f v a l ] = l i n p r o g ( c , A , b ) [ x , f v a l ] = l i n p r o g ( c , A , b , A e q , b e q ) [ x , f v a l ] = l i n p r o g ( c , A , b , A e q , b e q , l b , u b ) \left[x,fval \right]=linprog \left(c,A,b\right) \\ \left[x,fval \right]= linprog \left(c,A,b,Aeq,beq \right) \\ \left[x,fval \right]=linprog \left(c,A,b,Aeq,beq,lb,ub \right) [x,fval]=linprog(c,A,b)[x,fval]=linprog(c,A,b,Aeq,beq)[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)其中,x返回的是决策变量的取值,fval返回的是目标函数最优解。
不同的约束条件选用不同的命令。
示例:

其中zeros(x,y)为生成3行1列的零矩阵。本题中是求max,所以f=f*(-1),并最后使y=-y。
其他一些问题也可以化为线性规划问题,如求
∑ n = 1 ∞ ∣ x n ∣ s . t . A x ⩽ b \sum_{n=1}^{\infty}{\left |x_n \right |} \\ s.t.Ax\leqslant b n=1∑∞∣xn∣s.t.Ax⩽b
可令
u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 u_i=\frac{x_i+\left |x_i \right |}{2},v_i=\frac{\left |x_i \right |-x_i}{2} ui=2xi+∣xi∣,vi=2∣xi∣−xi
即将x与|x|视为两个有关系的变量化为线性规划问题。
某些多元函数问题,可以转化成线性规划问题,在Matlab中循环求解。
1.将其它函数转化成约束条件(如小于a),只关注决策变量和a的关系。
2.设置一个权重,每个函数乘以权重求和,依次增大权重。
示例
其中diag

本文介绍了使用Matlab进行线性规划、整数线性规划和非线性规划的基本方法,包括标准形式、解法和相关命令。线性规划涉及linprog函数,整数线性规划涉及intlinprog函数,非线性规划则用到fmincon函数,二次规划则使用quadprog函数。文章还举例说明了0-1整数规划解决互斥约束和指派问题的策略。
最低0.47元/天 解锁文章
1万+





