Matlab线性规划linprog函数

最近开始想学一学数学建模的相关知识,也找了不少视频,感觉无论是PPT做的还是讲解内容没有看起来很舒服的,只能多找几个版本多看几遍然后做一下笔记,先从最基础的线性规划函数开始写。


假设需要解决以下这个线性规划问题
maxz=2x1+3x2−5x3s.t.{x1+x2+x3=72x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≥0max\quad z = 2x_1+3x_2-5x_3\\s.t. \begin{cases} x_1+x_2+x_3=7 \\ 2x_1-5x_2+x_3\geq10 \\ x_1+3x_2+x_3\leq12 \\ x_1,x_2,x_3\geq0 \end{cases} maxz=2x1​+3x2​−5x3​s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​+x2​+x3​=72x1​−5x2​+x3​≥10x1​+3x2​+x3​≤12x1​,x2​,x3​≥0​

z=x1+2x2+5x3z = x_1+2x_2+5x_3z=x1​+2x2​+5x3​就是目标函数,求解的目的就是求满足条件的x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​的这三个变量的值使zzz的值最大,用到的理论其实是我研一上的一门课程优化方法里的单纯型法,是可以手算的,但是从应用角度讲用Matalb函数就可以直接得到结果,似乎参加数学建模不需要十分掌握原理。
那知道了规划问题那怎么将这些线性规划问题的系数输入到函数中呢
linprog函数的对应公式
x=linprog(f,A,b)x = linprog(f,A,b)x=linprog(f,A,b)
x=linprog(f,A,b,Aeq,beq)x = linprog(f,A,b,Aeq,beq)x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)x = linprog(f,A,b,Aeq,beq,lb,ub)x=linprog(f,A,b,Aeq,beq,lb,ub)
linprog参数的对应公式如下
minfxs.t.{Ax≤bAeq⋅x=beqlb≤x≤ubmin\quad fx\\ s.t. \begin{cases} Ax\leq b \\ Aeq\cdot x=beq\\ lb\leq x \leq ub \end{cases} minfxs.t.⎩⎪⎨⎪⎧​Ax≤bAeq⋅x=beqlb≤x≤ub​
在变量数量大于1时f,A,Aeq,lb,ubf,A,Aeq,lb,ubf,A,Aeq,lb,ub这些参数都是矩阵b,beqb,beqb,beq这两个参数根据不等式和等式的数量可能是一个数也可能是一个矩阵。
在实际应用时就是将原规划转换成公式所需的的形式,然后将对应的系数参数提取出来,输入到函数中进行求解。
这里值得注意到的是linproglinproglinprog函数只能求最小值,以及约束的条件只能是小于等于,所以需要对原来的线性规划进行一些转化,让线性规划的的目标变成求最小值,并且让约束条件都变成小于等于
让约束变成小于等于很简单左右两边都乘一个负号就行了那把2x1−5x2+x3≥102x_1-5x_2+x_3\geq102x1​−5x2​+x3​≥10这个约束条件左右加一个负号变成−2x1+5x2−x3≤10-2x_1+5x_2-x_3\leq10−2x1​+5x2​−x3​≤10放到一起

maxz=2x1+3x2−5x3s.t.{x1+x2+x3=7−2x1+5x2−x3≤10x1+3x2+x3≤12x1,x2,x3≥0max\quad z = 2x_1+3x_2-5x_3\\s.t. \begin{cases} x_1+x_2+x_3=7 \\ -2x_1+5x_2-x_3\leq10 \\ x_1+3x_2+x_3\leq12 \\ x_1,x_2,x_3\geq0 \end{cases} maxz=2x1​+3x2​−5x3​s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​+x2​+x3​=7−2x1​+5x2​−x3​≤10x1​+3x2​+x3​≤12x1​,x2​,x3​≥0​

接下来就是将求最大值转变为求最小值举个最简单的但是应该很有助于理解的例子
假设一个我们求函数y=−x2+5y=-x^2+5y=−x2+5的最大值y=−x2+5y=-x^2+5y=−x2+5函数图像如下,很明显最大值是x=0x=0x=0这一点此时最大值y=5y=5y=5

那求最小值是把函数图像调过来求最小值吗?可以看到此时的函数y1=x2−5y_1=x^2-5y1​=x2−5最小值是是x=0x=0x=0这一点此时最大值y1=−5y_1=-5y1​=−5

但是我们求解的y=−x2+5y=-x^2+5y=−x2+5函数的最大值是5实际上是y=x2−5y=x^2-5y=x2−5函数最小值的负数。那应该怎么理解呢
假设对于y=−x2+5y=-x^2+5y=−x2+5最大值解为x=x∗x=x^*x=x∗,y=y∗y=y^*y=y∗则y∗=−x∗2+5y^*=-x^{*2}+5y∗=−x∗2+5 对两边取负值则−y∗=x∗2−5-y^*=x^{*2}-5−y∗=x∗2−5 之前我们将−y∗-y^*−y∗看成y1y_1y1​所以求得的y1=x2−5y_1=x^2-5y1​=x2−5中的最小值y1∗y_1^*y1∗​其实是−y∗-y^*−y∗也就是y=−x2+5y=-x^2+5y=−x2+5最大值解的负数
因此我们将原线性规划问题变为
minz1=−2x1−3x2+5x3s.t.{x1+x2+x3=7−2x1+5x2−x3≤10x1+3x2+x3≤12x1,x2,x3≥0min\quad z_1 = -2x_1-3x_2+5x_3\\s.t. \begin{cases} x_1+x_2+x_3=7 \\ -2x_1+5x_2-x_3\leq10 \\ x_1+3x_2+x_3\leq12 \\ x_1,x_2,x_3\geq0 \end{cases} minz1​=−2x1​−3x2​+5x3​s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​+x2​+x3​=7−2x1​+5x2​−x3​≤10x1​+3x2​+x3​≤12x1​,x2​,x3​≥0​

其中z1=−zz_1=-zz1​=−z

好了我们已经将原问题转换为了符合使用linprog函数的形式接下来就是将函数所需要的每一个参数找出来然后放进函数里去求解,再把这个公式站过来,首先找fff
minfxs.t.{Ax≤bAeq⋅x=beqlb≤x≤ubmin\quad fx\\ s.t. \begin{cases} Ax\leq b \\ Aeq\cdot x=beq\\ lb\leq x \leq ub \end{cases} minfxs.t.⎩⎪⎨⎪⎧​Ax≤bAeq⋅x=beqlb≤x≤ub​

fx=[−2−35][x1x2x3]fx=\left[\begin{array}{c}-2 & -3 & 5 \end{array}\right]\left[\begin{array}{c}x_1 \\ x_2 \\ x_3 \end{array}\right] fx=[−2​−3​5​]⎣⎡​x1​x2​x3​​⎦⎤​
所以
f=[−1−2−5]f=\left[\begin{array}{c}-1 & -2 & -5 \end{array}\right] f=[−1​−2​−5​]
然后再来找AAA
Ax=[−25−1131][x1x2x3]Ax=\left[\begin{array}{c}-2 & 5 & -1 \\1 & 3 & 1 \end{array}\right]\left[\begin{array}{c}x_1 \\ x_2 \\ x_3 \end{array}\right] Ax=[−21​53​−11​]⎣⎡​x1​x2​x3​​⎦⎤​
所以A为
A=[−25−1131]A=\left[\begin{array}{c}-2 & 5 & -1 \\1 & 3 & 1 \end{array}\right] A=[−21​53​−11​]
则bbb为
b=[−1012]b=\left[\begin{array}{c}-10 \\ 12 \end{array}\right] b=[−1012​]
然后是
Aeq⋅x=[111][x1x2x3]Aeq\cdot x=\left[\begin{array}{c}1 & 1 & 1 \end{array}\right]\left[\begin{array}{c}x_1 \\ x_2 \\ x_3 \end{array}\right] Aeq⋅x=[1​1​1​]⎣⎡​x1​x2​x3​​⎦⎤​
Aeq=[111]Aeq=\left[\begin{array}{c}1 & 1 & 1 \end{array}\right] Aeq=[1​1​1​]

这里由于等式约束只有一个所以beq=7beq=7beq=7是一个数
因为原规划中x1,x2,x3≥0x_1,x_2,x_3\geq0x1​,x2​,x3​≥0只有下限没有上限lb≤x≤ublb\leq x \leq ublb≤x≤ub所以只需要输入lblblb,这里的lblblb就是
lb=[000]lb=\left[\begin{array}{c}0 \\ 0 \\0 \end{array}\right] lb=⎣⎡​000​⎦⎤​

[x1x2x3]≥[000]\left[\begin{array}{c}x_1 \\ x_2 \\ x_3 \end{array}\right]\geq\left[\begin{array}{c}0 \\ 0 \\0 \end{array}\right] ⎣⎡​x1​x2​x3​​⎦⎤​≥⎣⎡​000​⎦⎤​
当分解出了所有的参数了之后用matlab进行编程

f = [-2 -3 5];
A = [-2 5 -1; 1 3 1];
b = [-10; 12];
Aeq=[1 1 1];
Beq=7;
lb = zeros(3,1);
[x,z1] = linprog(f,A,b,Aeq,Beq,lb);
z=-z1

最后的结果如下,最优解为
x∗=[6.42860.57140]x^*=\left[\begin{array}{c}6.4286 \\ 0.5714 \\0 \end{array}\right] x∗=⎣⎡​6.42860.57140​⎦⎤​
最优值z∗=14.5714z^*=14.5714z∗=14.5714

Matlab线性规划函数linprog-小白详解相关推荐

  1. matlab 调整灰度,matlab灰度图像调整及imadjust函数的用法详解

    matlab--imadjust函数作用: 对进行图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵 在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J= ...

  2. matlab里open命令,matlab函数bwareaopen的详解

    matlab函数_连通区域 1. matlab函数bwareaopen──删除小面积对象 格式:BW2 = bwareaopen(BW,P,conn) 作用:删除二值图像BW中面积小于P的对象,默认情 ...

  3. matlab对图像进行gamma变换_matlab灰度图像调整及imadjust函数的用法详解

    matlab--imadjust函数作用: 对进行图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵 在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J= ...

  4. 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt

    基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...

  5. matlab图像处理常见函数及用法详解

    matlab图像处理常见函数及用法详解 -- 整理于2022.12.2 ,23.05-- clc;clear;%% 图片读取 RGB = imread('1.jpg'); % 图片读取 imshow( ...

  6. matlab中读入sav,matlab数据读取与存入详解

    matlab数据读取与存入详解 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件.MATLAB使用多种格式打开和保存数据.本章将要介绍 MATLAB中文件的读写和数据的导入导出 ...

  7. 单纯形法详解及MATLAB实现,对偶单纯形法详解及MATLAB实现

    单纯形法详解及MATLAB实现,对偶单纯形法详解及MATLAB实现 单纯形法 我们以这样一个方程组做为例子,来看一下单纯形法是如何解题的 这是一个已经化成标准形式的方程组,x4和x5是我们加入的松弛变 ...

  8. matlab做拉普拉斯曲线,Matlab 拉普拉斯滤波 以及 imfilter 详解(多图)

    Matlab 拉普拉斯滤波 以及 imfilter 详解(多图) 08-08栏目:技术 TAG:imfilter imfilter 代码: jhua.orgclc clear all A=imread ...

  9. 利用栈求表达式的值_高一数学月考考点之函数的表达式详解

    函数表达式考点详解,教你轻松学函数 Hello,大家好,这里是摆渡学涯.很高兴在这里跟大家分享知识哦.这次课程我们来为大家讲一下函数表达式相关的考点,教你轻松学函数. 基本概念 什么是函数表达式呢?我 ...

最新文章

  1. 工业互联网平台创新发展白皮书(2018)
  2. poj1730Pollard分解
  3. mySQL双机冗余_MySQL双机热备实现原理
  4. oracle+olh+hive,hadoop+hive+hbase的简单安装 | YallonKing
  5. 怎么解决深入学习PHP的瓶颈
  6. 常说的手机刷新率60Hz、120Hz有什么不同?
  7. Oracle 数据库的子查询(关联子查询)
  8. 运行Myeclipse发生这事这是怎么回事,大神们
  9. 超越 YOLOv5 的目标检测开源项目又上新了
  10. Handler用法总结
  11. mysql统计每个科目平均成绩_No.03 数据库经典面试之如何取出每科成绩的前三名...
  12. 吊打线段树的超级树状数组
  13. 终端服务器超出了最大允许连接数
  14. Ajax异步刷新,测试用户名是否被注册
  15. 微信小程序人脸识别方案
  16. 操作系统中的基础抽象
  17. WebSocket模拟群聊
  18. java电商项目搭建-------分布式文件存储系统(fastDFS)
  19. WiFi共享精灵自身存在的优势
  20. 大多数linux分区的文件系统,Linux分区、文件系统

热门文章

  1. JPEG有损压缩过程介绍
  2. 关于缓冲区溢出攻击原理的简单例子(C语言编写)
  3. OpenLDAP自定义Schema
  4. NS3网络仿真(14): TCP连接与端口扫描
  5. Linux下的复制粘贴
  6. 零基础学AI,轻松搞定人工智能6大方向【附资料】
  7. 微信小程序聊天界面进入自动滚动到底部,翻看历史聊天记录,收到的新消息不会马上置底,如收到新消息出现 底部有更多消息字样
  8. Windows Azure服务购买,收费,使用注意事项及学习资料推荐
  9. 移动端软键盘兼容方案
  10. Idea开发工具还原Ctrl+Z掉的内容