MATLAB优化

  • 学习目标
  • 1. 常见优化问题
    • 1.1无约束非线性优化
    • 1.2有约束规划
    • 1.3 目标规划
    • 1.4 最大最小化问题
    • 1.5 线性规划
    • 1.6 二次规划
    • 1.7多目标规划
    • 1.8非线性方程的优化解
  • 2.最小二乘最优问题
    • 2.1 约束线性最小二乘
    • 2.2 非线性数据(曲线)拟合
    • 2.3 非负线性最小二乘
  • 3.代数方程的求解
  • 总结

学习目标

  • 了解MATLAB常见优化问题
  • 掌握MATLAB求解优化问题的方法

1. 常见优化问题

在数学上,所谓优化问题,在给定的条件下求解目标函数的最优解。当给定条件为空时,此优化问题称为自由优化或无约束优化问题;当给定条件不空时,称为有约束优化或强约束优化问题。
在优化问题中,根据变量、目标函数和约束函数的不同,可以将问题大致分为:

  • 线性优化:目标函数和约束函数均为线性函数。
  • 二次优化:目标函数为二次函数,而约束条件为线性方程。线性优化和二次优化统称为简单优化。
  • 非线性优化:目标函数为非二次的非线性函数,或约束条件为非线性方程。

1.1无约束非线性优化

无约束最优化问题在实际应用中也比较常见,如工程中常见的参数反演问题。另外,许多有约束最优化问题可以转化为无约束最优化问题进行求解。求解无约束最优化问题的方法主要有两类,即直接搜索法和梯度法。

  • 直接搜索法适用于目标函数高度非线性,没有导数或导数很难计算的情况。由于实际工程中很多问题都是非线性的,直接搜索法不失为一种有效的解决办法。常用的直接搜索法为单纯形法,此外还有Hooke-Jeeves搜索法、Pavell共轭方向法等,其缺点是收敛速度慢。
  • 在函数的导数可求的情况下,梯度法是一种更优的方法,该法利用函数的梯度(一阶导数)和Hessian矩阵(二阶导数)构造算法,可以获得更快的收敛速度。
    在MATLAB中,无约束规划由3个功能函数fminbnd、fminsearch和fminunc实现。
    1.fminbnd函数
    该函数的功能是求取固定区间内单变量函数的最小值,也就是一元函数最小值问题。其数学模型为:

    式中,x均为标量,f(x)为目标函数。
    2.fminsearch函数
    该函数功能为求解多变量无约束函数的最小值。其数学模型是:

    其中,x为向量,f(x)为一函数,返回标量。
    【例】求的最小值。
    MATLAB命令行窗口输入以下代码:
clear all
clc
f='3*x(1)^3+3*x(1)*x(2)^3-7*x(1)*x(2)+2*x(2)^2';
x0=[0,0];
[x,f_min]=fminsearch(f,x0)

运行后得到结果如下:

x =0.6269    0.5960f_min =-0.7677

3.fminunc函数
该函数功能为求多变量无约束函数的最小值。
其使用格式如下:
x=fminunc(fun,x0):给定初值x0,求fun函数的局部极小值x。x0可以是标量、向量或矩阵。
x=fminunc(fun,x0,options):用options参数指定的参数进行最小化。
[x,fval]=fminunc(……)将x处的目标函数值返回给fval参数中。

1.2有约束规划

在有约束最优化问题中,通常要将该问题转化为更简单的子问题,这些子问题可以求解并作为迭代过程的基础。早期的方法通常是通过构造惩罚函数等来将有约束的最优化问题转换为无约束最优化问题进行求解。现在,这些方法已经被更有效的基于K-T方程解的方法所取代。
K-T方程的解形成了许多非线性规划算法的基础,这些算法直接计算拉格朗日乘子。用拟牛顿法更新过程,给K-T方程积累二阶信息,可以保证有约束拟牛顿的超线性收敛。
这些方法称为序列二次规划法(SQP),因为在每次主要的迭代过程中都求解一次二次规划子问题。该子问题可以用任意一种二次规划算法求解,求得的解可以用来形成新的迭代公式。
1.fmincon函数
该函数功能是求多变量有约束非线性函数的最小值。其调用格式如下:
x=fmincon(fun,x0,A,b)给定初值x0,求解fun函数的最小值点x。fun函数的约束条件为A*x≤b,x0可以是标量、矢量或矩阵。
2.nonlcon参数
该参数计算非线性不等式约束 和非线性等式约束 。nonlcon参数是一个包含函数名的字符串。该函数可以是M文件、内部文件或MEX文件。
它要求输入一个向量x,返回两个变量——解x处的非线性不等式向量c和非线性等式向量ceq。

1.3 目标规划

多目标规划有许多解法,下面列出常用的几种:

  1. 权和法
    该法将多目标向量问题转化为所有目标的加权求和的标量问题。加权因子的选取方法很多,有专家打分法、α方法、容限法和加权因子分解法等。
    该问题可以用标准的无约束最优化算法进行求解。
  2. ε约束法
    ε约束法克服了权和法的某些凸性问题。它对目标函数向量中的主要目标Fp进行最小化,将其它目标用不等式约束的形式写出
  3. 目标达到法
    目标函数系列为F(x)={F1(x), F2(x),…, Fm(x)},对应地有其目标值系列 。允许目标函数有正负偏差,偏差的大小由加权系数向量W={W1,W2,…,Wm}控制,于是目标达到问题可以指定目标{ },定义目标点P。
    4.目标达到法的改进
    目标达到法的一个好处是可以将多目标最优化问题转化为非线性规划问题,但是,在序列二次规划(SQP)过程中,一维搜索的目标函数选择不是一件容易的事情,因为在很多情况下,很难决定是使目标函数变大好还是使它变小好。这导致许多目标函数创建过程的提出。可以通过将目标达到问题变为最大最小化问题来获得更合适的目标函数。

1.4 最大最小化问题

通常我们遇到的都是目标函数的最大化和最小化问题,但是在某些情况下,则要求使最大值最小化才有意义。
最大最小化问题的基本数学模型为:

式中 为矢量,为矩阵,为函数返回矢量。可以是非线性函数。

1.5 线性规划

线性规划方法是在第二次世界大战中发展起来的一种重要的数量方法,它是处理线性目标函数和线性约束的一种较为成熟的方法,主要用于研究有限资源的最佳分配问题,即如何对有限的资源作出最佳方式地调配和最有利地使用,以便最充分地发挥资源的效能去获取最佳的经济效益。目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。
线性规划问题的标准形式是:


线性规划的求解方法主要是单纯形法:从所有基本可行解的一个较小部分中通过迭代过程选出最优解。其迭代过程的一般描述为:
 将线性规划化为典范形式,从而可以得到一个初始基本可行解x(0)(初始顶点),将它作为迭代过程的出发点,其目标值为z(x(0))。
 寻找一个基本可行解x(1),使z(x(1))≤z(x(0))。方法是通过消去法将产生x(0)的典范形式化为产生x(1)的典范形式。
 继续寻找较好的基本可行解x(2),x(3),…,使目标函数值不断改进,即z(x(1))≥z(x(2)) ≥z(x(3)) ≥…。当某个基本可行解再也不能被其它基本可行解改进时,它就是所求的最优解。

1.6 二次规划

如果某非线性规划的目标函数为自变量的二次函数,约束条件全是线性函数,就称这种规划为二次规划。其标准数学模型为:
式中,H,A和Aeq为矩阵,f,b,beq,lb,ub和x为列矢量。
其它形式的二次规划问题都可转化为标准形式。在MATLAB中可以利用quadprog函数求解二次规划问题。

1.7多目标规划

多目标线性规划是多目标最优化理论的重要组成部分,由于多个目标之间的矛盾性和不可公度性,要求使所有目标均达到最优解是不可能的,因此多目标规划问题往往只是求其有效解。目前求解多目标线性规划问题有效解的方法包括理想点法、线性加权和法、最大最小法、目标规划法。
多目标线性规划有着两个和两个以上的目标函数,且目标函数和约束条件全是线性函数,其数学模型表示为:

约束条件为:

上述多目标线性规划可用矩阵形式表示为:

约束条件:

1.8非线性方程的优化解

非线性方程的求解问题可以看作是单变量的最小化问题,通过不断缩小搜索区间来逼近问题解的真值。在MATLAB中,非线性方程求解所采用的算法包括二分法、secant法和逆二次内插法的组合。
在MATLAB中可以利用fzero函数求解求单变量函数的零点。

2.最小二乘最优问题

最小二乘问题 中的理解为误差,优化问题就是要使得误差的平方和最小。

2.1 约束线性最小二乘

有约束线性最小二乘的标准形式为
其中:C、A、Aeq为矩阵;d、b、beq、lb、ub、x是向量。
在MATLAB中,约束线性最小二乘用函数conls求解。

2.2 非线性数据(曲线)拟合

非线性曲线拟合是已知输入向量xdata、输出向量ydata,并知道输入与输出的函数关系为ydata=F(x, xdata),但不清楚系数向量x。进行曲线拟合即求x使得下式成立:

在MATLAB中,可以使用函数curvefit解决此类问题。

2.3 非负线性最小二乘

非负线性最小二乘的标准形式为:
其中,矩阵C和向量d为目标函数的系数,向量x为非负独立变量。

3.代数方程的求解

代数方程,即由多项式组成的方程,有时也泛指由未知数的代数式所组成的方程,包括整式方程、分式方程和无理方程。
求解代数方程的函数是solve,其使用方法为:
solve(eq):eq是用符号表达式或字符串表示的方程;
solve(eq,var) :var用于指定未知变量;
(1)求解方程 ,其中分别将x和b视为未知数。
首先将x作为未知数,在MATLAB命令行窗口输入以下语句:

 A = solve('a*x^2 + b*x + c')

得到结果为:

A = -(b + (b^2 - 4*a*c)^(1/2))/(2*a)-(b - (b^2 - 4*a*c)^(1/2))/(2*a)

再将b作为未知数,在MATLAB命令行窗口输入以下语句:

A = -(a*x^2+c)/x

总结

以上就是今天学习的内容,记得一起打卡呀!

【Matlab优化知识点合集】新手入门第十二天相关推荐

  1. 【Matlab数理统计知识点合集】新手入门第十三天

    数理统计 学习目标 1.随机数的产生 1.1二项分布随机数 1.2 泊松分布随机数 1.3 均匀分布随机数 1.4 正态分布随机数 1.5 其他常见分布随机数 2.概率密度函数 2.1 常见分布的密度 ...

  2. 【Matlab程序设计知识点合集】新手入门第十五天

    MATLAB程序设计 前言 1.MATLAB的程序结构 1.1 if分支结构 1.2 switch分支结构 1.3 while循环结构 1.4 for循环结构 2.MATLAB的控制语句 2.1 co ...

  3. 【Matlab图像处理知识点合集】新手入门第二十一天

    图像处理 前言 1.查看图像文件信息 2.显示图像 2.1默认显示方式 2.2添加颜色条 2.3显示多帧图像 2.4 显示动画 2.5 三维材质图像 3.图像的灰度变换 3.1 图像的直方图 3.2 ...

  4. 【Matlab经典智能算法】新手入门第十六天

    经典智能算法 前言 1.免疫算法的MATLAB实现 1.1基本原理 1.2程序设计 1.3经典应用 2.小波分析算法的MATLAB实现 2.1基本原理 2.2程序设计 2.3经典应用 3.PID控制器 ...

  5. 【Matlab之Simulink基础】新手入门第十九天

    Simulink基础 学习目标 1.基本介绍 1.2 模块库介绍 1.3 Simulink仿真基本步骤 2.模块操作 2.1Simulink模块类型 2.2自动连接模块 2.3手动连接模块 2.4 设 ...

  6. 打开程序时固定位置_新手入门第五课:免费开源图像处理程序GIMP之矩形选择工具...

    GIMP是一款图像处理软件,是跟Photoshop同一类型的软件,为了方便介绍,后面每篇相关GIMP图像处理软件的介绍文章的开头,我都将插入一段文字,用于介绍GIMP是什么,让不熟悉的朋友知道这是干什 ...

  7. JVM面试知识点合集 — Android 春招 2022

    JVM面试知识点合集 - Android 春招 2022 星光不问赶路人,时间不负有心人 Tips:文章较长,可以在侧栏目点击子标题,快速跳转 喜欢的话,就一键三连吧

  8. 全国计算机二级office选择题知识点,全国计算机二级考试MS office选择题知识点合集(通用)...

    全国计算机二级考试MS office选择题知识点合集(通用) 计算机二级选择题考点总结 2014年计算机二级 office高级应用考试基础知识 计算机的发展.类型及其应用领域. 1.计算机 (comp ...

  9. matlab绿色版本合集

    网上找的matlab绿色版本合集链接https://pan.baidu.com/s/1gfDyIo7     密码:pxrs 转载于:https://www.cnblogs.com/babyfei/p ...

最新文章

  1. python 同时给多个变量赋值
  2. NOIP模拟题——来自风平浪静的明天
  3. android插件式换肤,Android学习之插件化换肤
  4. Adhesive框架系列文章--Mongodb数据服务使用实践
  5. 什么是 devops_DevOps对您意味着什么?
  6. Java面试之谈谈对Volatile的理解
  7. 大数据测试之hadoop单机环境搭建(超级详细版)
  8. 2018_09_21_刚才发现csdn漏掉了我的上一篇日记
  9. 深入探讨apply()方法的作用
  10. 世界三大统计分析软件sas splus spss
  11. java 获取html title_java htmlparser 获取网页title
  12. win10 华硕ASUS USB AC56 无线网卡 欧版 5G 信号不全 问题修复
  13. 林志福林玉使林树勋林宝敏林士焜,玉树传芳远,心正永德长;天经地义重,图书翰墨香
  14. Forward Secrecy
  15. Jackson多克隆抗体丨艾美捷Jackson纳米二级抗体研究
  16. WPS新建文字分享微信.docx形式_高效神器:花 5 分钟输入文字,就能自动变成 PPT...
  17. python人工智能的重要性_为什么说Python是AI时代必备技能?
  18. Batch Nornaliation:Accelerating Deep Network Training by ReducingInternal Covariate Shift
  19. BBEdit 12.6.6 代码编辑器
  20. Android 禁止屏幕休眠和锁屏的方法

热门文章

  1. Java HTML转成图片
  2. python——pandas
  3. 详细介绍如何读懂STM32开发板电路原理图以及芯片文档和开发手册,并编写一个测试程序:点亮一个LED灯
  4. 在万米高空享受高速网络!中国航司机队将能接入高速互联网;温德姆酒店集团将采用亚马逊云技术 | 美通社头条...
  5. 3DAI智能皮肤检测仪能做什么,它的原理是什么?
  6. ibmMQ-第十四章
  7. EasyClick 退出脚本
  8. PHP和js判断访问终端是否是微信浏览器手机还是电脑
  9. php 公众号发红包,真实案例教你公众号发低于1元的红包
  10. 10moons uv2000 摄像头驱动的安装