最优化总结

本文介绍了MATLAB中处理最优化问题的方法,包括运输、生产计划、指派和数据拟合等实例。重点讲解了线性规划、向量和矩阵范数的概念,以及如何使用meshgrid函数生成网格数据和linprog函数进行无约束最优化求解。
摘要由CSDN通过智能技术生成

引入问题

例1 运输问题

在这里插入图片描述
在这里插入图片描述

例2 生产计划问题

在这里插入图片描述
在这里插入图片描述

例3 指派问题

在这里插入图片描述
在这里插入图片描述

例4 数据拟合问题

在这里插入图片描述
在这里插入图片描述

线性规划

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

向量和矩阵范数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拟合

线性拟合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非线性拟合

在这里插入图片描述
在这里插入图片描述

无约束最优化问题的基本思想

在这里插入图片描述
在这里插入图片描述

实验

plot函数

在这里插入图片描述

meshgrid函数

  1. 用两个坐标轴上的点在平面上画格。
    用法:
      [X,Y]=meshgrid(x,y)
      [X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
      [X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
      
      例题1:
  x=-3:1:3;
  y=-2:1:2;
  [X,Y]= meshgrid(x,y);

这里meshigrid(x,y)的作用是产生一个以向量x为行,向量y为列的矩阵,而x是从-3开始到3,每间隔1记下一个数据,并把这些数据集成矩阵X;同理y则是从-2到2,每间隔1记下一个数据,并集成矩阵Y。即

  X=
  -3 -2 -1 0 1 2 3
  -3 -2 -1 0 1 2 3
  -3 -2 -1 0 1 2 3
  -3 -2 -1 0 1 2 3
  -3 -2 -1 0 1 2 3
  Y =
  -2 -2 -2 -2 -2 -2 -2
  -1 -1 -1 -1 -1 -1 -1
  0 0 0 0 0 0 0
  1 1 1 1 1 1 1
  2 2 2 2 2 2 2

附注:例题中meshgrid(-3:1:3,-2:1:2);因为-3:1:3产生的是含有7个数字的行向量;-2:1:2产生的是含有5个数字的行向量。所以该命令的结果是产生57的矩阵(X,Y都是57的矩阵;其中X是由第一个含7个元素的行向量产生,Y是由第二个行向量产生)

  1. meshgrid是MATLAB中用于生成网格采样点的函数。在使用MATLAB进行3-D图形绘制方面有着广泛的应用。
    生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时,往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x,y)。
    语法:
      [X,Y] = meshgrid(x,y)

上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的,且X、Y的行数都等

于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数(这个结论可以通过查看meshgrid的源代码得到,可以通过示例程序得到验证)。

[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图

linprog函数

min f’x
约束条件: Ax<=b
等式约束条件: Aeqx=beq
lb<=x<=ub

linprog函数的调用格式如下:
linprog中f都是求最小值,这个要记住。 A和b是不等式约束条件的参数。 Aeq和beq是等式约束条件的参数。 lb和ub为x取值的取值范围。

在这里插入图片描述

函数使用形式:

x=linprog(f,A,b)  
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,x0)  
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)  
[x,fval]=linprog()  
[x, fval, exitflag]=linprog()  
[x, fval, exitflag, output]=linprog()  
[x, fval, exitflag, output, lambda]=linprog()  

一般主要用的是:

x=linprog(f,A,b,Aep,beq,lb,ub);  

设定中主要要注意的就是参数的维数是否于使用的相对应。

举个例子吧:
在这里插入图片描述

例2:
生活中最常用的:假如有三种商品,a,b,c。三种商品总的数量不能超过30;c种商品不能超过15,b种商品不能超过10。
商品的单价是10,20,30。现在求三种商品各是多少,销售额最高。

转化为数学问题:

条件:
a+b+c<30
c<15
b<10

函数:

f = 10*a+20*b+30*c

因为linprog求的是最小值,一次我们改为:

f = -10*a+20*b+30*c)

这样我们有了函数,然后根据约束条件不等式,有:

A = [1 1 1;0 0 1;0 1 0]  
b = [30 15 10]  

但这样算出来的结果大家会发现是小数,也可能是负数。

因此我们加入a b c取值的上下限

lb = [0 0 0]  
ub = [30 30 30]  

如果在计算中需要得到小数的结果,只要写成0.00或者30.00就可以了
最后带入函数计算即可。

原创内容,笔者才疏学浅,若有错误或遗漏之处,还望海涵,敬请指正,如有转载,请注明出处,谢谢!!!

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值