MATLAB/Python 数学建模之最简单的线性规划问题(一)

学控制=计算机+数学,最近搞论文要自己建模,抛弃simulink后从最简单的学起
建模分5个步骤:
1、提出问题
2、选择建模方法
3、推导模型的数学表达式
4、求解模型
5、回答问题
一 MATLAB工具
线性规划属于优化问题,在MATLAB中可以使用linprog函数求解线性规划问题。线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。可以使用同一个函数 ,只需变号就行了。
求最小值的标准式如下:
在这里插入图片描述
其中,min c^Tx是目标函数,s.t.大括号就是约束条件,cT与x是n维的列向量,A、Aeq为矩阵、b、beq为列向量

MATLAB中 linprog函数有两种用法:

  1. X = linprog(f,A,b,Aeq,beq,LB,UB,X0)
  2. [x,FVAL] = linprog(f,A,b,Aeq,beq,LB,UB,X0)

其中返回的值 X 是向量 x 的值,FVAL 是目标函数的值,LB 和 UB 分别是变量 x的下界和上界

举例:
在这里插入图片描述
求最大值线性规划问题,仔细看,自变量x是没有上限的,只有下限0,因此使用linprog函数时,只需将其当作min求目标函数,再相应变号:
首先定义目标函数:c = [2,3,-5];
定义约束函数:a = [-2,5,-1;1,3,1];(这里10变号为-10,相应的左边式子也要变号)
b = [-10,12];
aeq = [1,1,1];
beq = 7;
lb = zeros(3,1);%下限为三行一列的全零矩阵,即[x1,x2,x3]’=[0,0,0]’

编写M文件:

c = [-2,-3,5];
a = [-2,5,-1;1,3,1];
b = [-10,12];
aeq = [1,1,1];
beq = 7;
lb = zeros(3,1);%下限为三行一列的全零矩阵,即[x1,x2,x3]'=[0,0,0]'

x = linprog(c,a,b,aeq,beq,lb)
value = c*x

运行得到结果:(x=最优解,value=最优解的取值)
在这里插入图片描述

二、 python
函数格式linprog(c, a, b, Aeq, Beq, LB, UB,method=‘simplex’, callback, options)

使用到两个库:
import numpy as np
from scipy import optimize

针对上面那个求最大值问题

import numpy as np
from scipy import optimize

c = [-2,-3,5]
a = [[-2,5,-1],[1,3,1]]
b = [-10,12]
Aeq = [[1,1,1]]
Beq = [7]
lb = [[0,None],[0,None],[0,None]] #由于x有三个,最小值是三行一列的0矩阵
result = optimize.linprog(c,a,b,Aeq,Beq,lb)

print(result)

run一下:
在这里插入图片描述

可以看到最优解x取值【6.628714,0.571428571,0.235900788】’
最优解取值 value = -14.571428565645032

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值