线性规划问题:

linprog函数

2.1 x = linprog(f,A,b)

可用于求解

2.2 x = linprog(f,A,b,Aeq,beq)

可用于求解

2.3 x = linporg(f,A,b,Aeq,beq,VLB,VUB)

可用于求解

2.4 [x,fval] = linprog(f,A,b,Aeq,beq,VLB,VUB)

其用法与 2.3 一致,只是这种写法会返回目标函数的值(即最小值)fval

若要求最大值则将 返回的目标函数的值 取相反数

例:

max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3 s.t.  x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≥ 0 \begin{array}{ll} & \max z=2 x_{1}+3 x_{2}-5 x_{3} \\ \text { s.t. } & x_{1}+x_{2}+x_{3}=7 \\ & 2 x_{1}-5 x_{2}+x_{3} \geq 10 \\ & x_{1}+3 x_{2}+x_{3} \leq 12 \\ & x_{1}, x_{2}, x_{3} \geq 0 \end{array}  s.t. ​maxz=2x1​+3x2​−5x3​x1​+x2​+x3​=72x1​−5x2​+x3​≥10x1​+3x2​+x3​≤12x1​,x2​,x3​≥0​

f=[2;3;-5];
a=[-2 5 -1;1 3 1];
b=[-10;12];
aeq=[1 1 1];
beq=7;
[x,fval]=linprog(-f,a,b,aeq,beq,zeros(3,1));
%注意fval是最小值 所以要取相反数
fprintf('x1=%.4f,x2=%.4f,x3=%.4f\nz:%4f\n',x,-fval)
  1. 生产决策问题
    一生产甲、乙两种产品,己知制成一吨产品甲需用资源A 3吨,资源B 4平方米,产品乙需用资源A 2吨,资源B6平方米,资源C 7个单位。若每吨产品甲和乙的经济价值分别为7万元和5万元,3种资源的限制量分别为80吨、220平方米和230个单位,分析应生产这两种产品各多少吨才能使创造的总经济价值最高?
    这里可以令生产产品甲的数量为x_1生产产品乙的数量为x_2。
f=[-7;-5];
A=[3 24 60 7];
b=[80;220;230];
lb=zeros(2,1);
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb)
  1. 转换

    min ⁡ z = ∣ x 1 ∣ + 2 ∣ x 2 ∣ + 3 ∣ x 3 ∣ + 4 ∣ x 4 ∣ \operatorname { m i n } z = | x _ { 1 } | + 2 | x _ { 2 } | + 3 | x _ { 3 } | + 4 | x _ { 4 } | minz=∣x1​∣+2∣x2​∣+3∣x3​∣+4∣x4​∣
    x 1 − x 2 − x 3 + x 4 = 0 x 1 − x 2 + x 3 − 3 x 4 = 1 x 1 − x 2 − 2 x 3 + 3 x 4 = − 1 2 \left. \begin{array} { l } { x _ { 1 } - x _ { 2 } - x _ { 3 } + x _ { 4 } = 0 } \\ { x _ { 1 } - x _ { 2 } + x _ { 3 } - 3 x _ { 4 } = 1 } \\ { x _ { 1 } - x _ { 2 } - 2 x _ { 3 } + 3 x _ { 4 } = - \frac { 1 } { 2 } } \end{array} \right. x1​−x2​−x3​+x4​=0x1​−x2​+x3​−3x4​=1x1​−x2​−2x3​+3x4​=−21​​

    这里是一个到线性规划的转换,要做一个变量的变换,把每一个绝对值x都替换成一个u和v的表示变量
    如:

 u = (x + |x|) / 2
`v = (|x| - x) / 2
   clc,clearc = 1:4;c = [c,c];aeq = [1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];Aeq = [aeq,-aeq];beq = [0 1 -1/2];[x,y] = linprog(c,[],[],Aeq,beq,zeros(8,1))x = x(1:4)-x(5:8)

fminunc函数

求多变量无约束函数的最小值。

语法

  • x = fminunc(fun,x0)
  • x = fminunc(fun,x0,options)
  • x = fminunc(problem)
  • [x,fval] = fminunc( ___ )
  • [x,fval,exitflag,output] = fminunc( __ )
  • [x,fval,exitflag,output,grad,hessian] = fminunc( ___ )

表示和描述

  • x = fminunc(fun,x0)从x0点开始,尝试找到fun中描述的函数的一个局部最小x。点x0可以是标量、向量或矩阵。
  • Note fminunc适用于无约束的非线性问题。如果您的问题有约束,通常使用fmincon。参见优化决策表。
  • x = fminunc(fun,x0,options)通过选项中指定的优化选项最小化乐趣。使用 optimoptions 设置这些选项。
  • x = fminunc(problem)找到问题的最小值,其中问题是 Input Arguments 中描述的结构。
  • [x,fval] = fminunc( __ ),对于任何语法,返回目标函数在解x处的值
  • [x,fval,exitflag,output] = fminunc()另外返回一个描述fminunc退出条件的exitflag值,以及一个包含优化过程信息的结构输出
  • [x,fval,exitflag,output,grad,hessian] = fminunc( __ )另外返回:
    • 梯度-解x处的梯度。
    • Hessian- 解决方案x的x1和x2的偏导。
    • H e s s i a n = H i j = ∂ 2 f ∂ x i ∂ x j Hessian=H _ { i j } = \frac { \partial ^ { 2 } f } { \partial x _ { i } \partial x _ { j } }Hessian=Hij=∂x**ix**j∂2f

例:

  1. 找到使函数f(X)=-X1X2X3最小化的值,其中0≤X1+2X2+2X3≤72


2.
f ( x ) = 3 x 1 2 + x 2 2 + 2 x 1 x 2 f ( x ) = 3 x _ { 1 } ^ { 2 } + x _ { 2 } ^ { 2 } + 2 x _ { 1 } x _ { 2 } f(x)=3x12​+x22​+2x1​x2​
的最小值

quadprog函数

求解二次规划

x=quadprog(H,f,A,b)
x=quadprog(H,f,A,b,Aeq,beq)
x=quadprog(H,f,A,b,Aeq,beq,lb,ub)
x=quadprog(H,f,A,b,Aeq,beq,Ib,ub,x0)
x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval]quadprog(..)
[x,fval,exitflag]=quadprog(.…)

例:

f ( x ) = 1 / 2 x 1 2 + x 2 2 − x 1 x 2 − 2 x 1 − 6 x 2 f ( x ) = 1 / 2 x _ { 1 } ^ { 2 } + x _ { 2 } ^ { 2 } - x _ { 1 } x _ { 2 } - 2 x _ { 1 } - 6 x _ { 2 } f(x)=1/2x12​+x22​−x1​x2​−2x1​−6x2​

{ x 1 + x 2 ≤ 2 − x 1 + 2 x 2 ≤ 2 2 x 1 + x 2 ≤ 3 0 ≤ x 1 , 0 ≤ x 2 \{ \begin{array} { l } { x _ { 1 } + x _ { 2 } \leq 2 } \\ { - x _ { 1 } + 2 x _ { 2 } \leq 2 } \\ { 2 x _ { 1 } + x _ { 2 } \leq 3 } \\ { 0 \leq x _ { 1 } , 0 \leq x _ { 2 } } \end{array} {x1​+x2​≤2−x1​+2x2​≤22x1​+x2​≤30≤x1​,0≤x2​​

​ 【分析】首先应该把目标函数表示成如下矩阵形式:

​ 这里要细说一下如何写成矩阵形式。

​ 首先,向量x是很容易写出的,因为f(x)包含两个变量x1和x2,因此

​ 其次,向量f只与两个变量x1和x2的一次项有关,所以fTx=-2x1-6x2,因此

​ 最后,矩阵H只与两个变量x1和x2的二次项有关,所以,这里要注意的是不同于二次型,这里有个系数1/2,所以矩阵H的元素是二次型中的矩阵元素大小的两倍。给出一个规律:设矩阵H第i行第j列的元素大小为H(i,j),二次项xixj的系数为a(i,j),则

​ 本例中,,这是由于x1的平方项(即x1x1)系数为1/2,所以第1行第1列的元素为1=2*(1/2),x2的平方项(即x2x2)系数为1,所以第2行第2列的元素为2=21,x1x2项(即x2x*1)的系数为-1,所以第1行第2列和第2行第1列的元素均为-1。

​ 目标函数搞定之后,下面来看约束条件部分,约束条件应该写成如下形式:

​ 本例中约束条件只有不等式约束,因此Aeq和beq为空,对于A和b很容易就可以得出来:

​ 而约束条件中对变量x1和x2只给出下限,没有给上限,因此ub为空,

​ 得到了所有的参数,将参数输入MATLAB,编程如下:(代码是直接在Command Window中一行一行录入的,所以每行前面有符号“>>”)

H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];
lb = [0; 0];
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb)

画图

matlab绘图

%x1=4
L1=[4,0;4,4];
plot(L1(:,1),L1(:,2));hold on
text(4.1,3.5,'x_1=4','color','b');
%x2=3
L2=[0 3;5 3];
plot(L2(:,1),L2(:,2));hold on
text(0.8,3.1,'x_2=3','color','b');
%2*x1+5*x2=12
L3=[0 2.4;5 0.4];
plot(L3(:,1),L3(:,2));hold on
text(1,1.5,'2x_1+5x_2=12','color','b')
%x1+2*x2=8
L4=[0,4;4,2];
plot(L4(:,1),L4(:,2));
text(3,2.5,'x_1+2x_2=8','color','b') %几个点围成的图像的阴影
x=[0 0 2 4 4]';
y=[2.4 3 3 2 0.8]';
fill(x,y,'r');
xlabel('x_1')
ylabel('x_2') axis([0 5.3 -0.2 4]) %交点1
z0=[0,2.4;4.8,0];
plot(z0(:,1),z0(:,2),'k--','LineWidth',2);
text(4.5,0.3,'z=4.8')
%交点2
z1=[0,2.8;4.6,0.5];
plot(z1(:,1),z1(:,2),'k--','Linewidth',2);
text(4.6,0.5,'z=5.6')
%交点3
z2=[0,3;4.6,0.7];
plot(z2(:,1),z2(:,2),'k--','Linewidth',2);
text(4.6,0.7,'z=6')
%交点4
z3=[0.6,3.7;4.6,1.7];
plot(z3(:,1),z3(:,2),'g--','Linewidth',2);
text(4.6,1.7,'z=8')
%画交点
text(4,2,'A_2','color','r','fontsize',20);
text(2,3,'A_1','color','r','fontsize',20);

【Matlab基础学习】运筹学-线性规划简单总结相关推荐

  1. 正交基 matlab,matlab基础学习(五)之映射和正交基

    matlab基础学习(5)之映射和正交基 一.映射 在matlab中,矢量y正交映射到矢量x上的定义如下: Px(y) = /(x^2)*x 对于长度为N的列矢量y映射到长度为N的列矢量x上的计算方法 ...

  2. Matlab基础学习(中)

    1.前记,今天的继续学习知乎专栏:https://zhuanlan.zhihu.com/c_1208096335112843264 所有代码:学习建议,复制粘贴到matlab脚本,保存命名自定,按小结 ...

  3. MATLAB基础学习(二)-变量类型与赋值

    matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的.matlab提供的变量类型很多,最基础的是三种:数值变量.符号变量.字符串,其他的类 ...

  4. Matlab基础学习笔记(五)—— Simulink仿真

    听万门的一个Matlab实践课做的笔记 知识结构 笔记链接(点我) 知识点比较零散记得比较概括,用幕布看可能更清晰一点 本节内容只是做个简单记录,具体使用某个库再进行具体学习 顺便放个邀请注册链接,可 ...

  5. salesforce lightning零基础学习(一) lightning简单介绍以及org开启lightning

    lightning对于开发salesforce人员来说并不陌生,即使没有做过lightning开发,这个名字肯定也是耳熟能详.原来的博客基本都是基于classic基于配置以及开发,后期博客会以ligh ...

  6. 计算机视觉与深度学习 | 基于MATLAB 深度学习工具实现简单的数字分类问题(卷积神经网络)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 %% Time:2019.3.7 ...

  7. MATLAB基础学习笔记01:初探MATLAB世界

    文章目录 一.安装MATLAB2016 (一)下载MATLAB2016 (二)安装MATLAB2016 二.启动MATLAB2016 --解决远程桌面启动报错的问题 三.变量操作 (一)给变量赋值 ( ...

  8. matlab中如何用数组绘图,matlab 基础学习(1)——数组,矩阵操作和绘图基础学习...

    一维数组(创建,赋值,取值,分割取值,四则运算等操作) 创建一维数组 >> A=[] %创建空的数组 >> B=[1 2 3 4 5] %两种创建行向量,数组的方式 >& ...

  9. MATLAB基础学习

    [注]学习内容来自书籍<MATLAB R2020a完全自学一本通> 1 元胞数组的寻访 对于元胞数组C, C(m,n) 指的是元胞数组中第m行第n列的单元,而 C{m,n} 指的是元胞数组 ...

最新文章

  1. Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求
  2. How to resolve conflicts in TortoiseSVN
  3. 重构碎片化知识_知识碎片化时代,如何妙用思维导图,提高你的学习效率(含福利)...
  4. 【EPS精品教程】史上最牛EPS说明文档大全(23个PDF文档)
  5. Wordpress基础:精简头部wp_head
  6. Java8 Stream详解~筛选:filter
  7. appsan可以扫描linux吗,[经验]使用appscan实现多站扫描简单自动化
  8. 再见,Eclipse
  9. c# npoi 公式不计算_高中数学最不容易,最难计算,全高中数学所有基础性质公式归纳...
  10. c语言整型的最大范围,整型变量范围最大到32750?
  11. 从零开始学php 光盘,从零开始学PHP(第2版)(含DVD光盘1张)
  12. Jmeter(十九) 后置处理器JSON Extractor 提取json的多个值
  13. linux更换steam目录,如何删除Steam?
  14. SQlite3基本用法,使用sublime编辑器
  15. RK3368-android8.1-每天凌晨3点自动重启机器
  16. 幽默笑话,哥们误会了,木子家原创
  17. 计算机网络课程设计:电子政务
  18. [转]800个有趣句子帮你记忆7000个单词
  19. 风华才气,春华秋实———忆信管学子杨友岁月如歌
  20. 传智播客支持中国制造2025人才培养工程

热门文章

  1. VC 清除IE缓存、cookie、历史记录等
  2. UcosIII基本介绍
  3. Python之列表和元组的基本操作(超详细)
  4. 第019讲:我的地盘听我的
  5. COM技术初探(一)
  6. html流控官网qq群,集群流控 · alibaba/Sentinel Wiki · GitHub
  7. OTA 下载升级包流程
  8. 支付宝首页搜索栏淡出效果HTML,仿支付宝首页效果实现
  9. Node.js:Buffer基础
  10. 梦幻新开服务器维护,梦幻西游新开的新服务器,新开后是不是免费的 – 手机爱问...