matlab最优化问题的函数(fminbnd),fmincon,globalsearch,multistart(全局局部最优)

matlab最优化问题的函数(fminbnd),fmincon,globalsearch,multistart(全局局部最优)在讨论优化问题时我们先来讨论全局最优和局部最优全局最优:问题所有的可能解中效果最好的解。局部最优:问题的部分可能解中效果最好的解。一个针对的全局,一个针对的部分。就像我们设初值一样,设置了以后函数开始迭代变化。这时可能出现两种现象①迭代到一个解,该解距离初值较近,此处该值很有可能是局部最优。②迭代到一个解,该解距离初值相对较远,此处该值很大可能是全局最优,当然也可能是局部最优。上…

大家好,又见面了,我是你们的朋友全栈君。

在讨论优化问题时我们先来讨论全局最优和局部最优

全局最优:问题所有的可能解中效果最好的解。
局部最优:问题的部分可能解中效果最好的解。

一个针对的全局,一个针对的部分。
就像我们设初值一样,设置了以后函数开始迭代变化。
这时可能出现两种现象
①迭代到一个解,该解距离初值较近,此处该值很有可能是局部最优。
②迭代到一个解,该解距离初值相对较远,此处该值很大可能是全局最优,当然也可能是局部最优。

在这里插入图片描述
上面这个图相信大家看到过很多类似的,包括那个爬山坡的图在内,但是这里想强调的一点,这些图虽然很直观,但是也容易造成误解。我去……我一个求最优干嘛让我看这些图,我那些一堆公式,怎么才能和这些图对上呢???
这里就需要解释一下了:我们的求解其实都是迭代的过程,我们的函数在我们选择的起始点进行多个方向的尝试,看哪个反向能得到最优就向着哪个方向前进。那么什么是最优,这里我们的理性告诉我们,其他方向都比我差,我就是最优。是这样么?你是不是进入了一个小沟沟?这里就是局部了,你只能说你在你附近方圆几百里是最好的,但是地球那么大,你不想去看看么,这里就引入了全局最优,你是中国第一不行,你需要是全世界第一才行。

下面我们开始介绍我们matlab优化求解的函数
说到求解参数,我们需要先介绍下在求解最初设置的优化项。(下面两张图来自matlab官方)
在这里插入图片描述
在这里插入图片描述
下面介绍一下如何使用,以及常用项
①设置容差

options.TolX = 1e-15;%当前点 x 的终止容差。
options.TolFun = 1e-15;%函数值的终止容差。

②设置最大迭代次数

options.MaxIter=1000;

③设置求解上下限和初始值

%上边界
LB = [100,0,0,0.50,1,-1,700];
% 下边界
UB = [20000,900,360,11,20,20,90];
% 优化初始值
x0 = [1000 500 270 200 9 15 80 ];

设置完这些,我们就可以开始我们的待优化函数构造+优化程序编写了。

①fminbnd(求单变量非线性的极小值)(局部最优)

单变量非线性——现在很多问题都是多变量的,这个函数不知道大家用不用,我是用的比较少的
算法介绍
fminbnd 是一个函数文件。算法基于黄金分割搜索和抛物线插值方法。除非左端点 x1 非常靠近右端点 x2,否则 fminbnd 从不计算 fun 在端点处的值,因此只需要为 x 在区间 x1 < x < x2 中定义 fun。

示例
x = fminbnd(fun,x1,x2) 返回一个值 x,该值是 fun 中描述的标量值函数在区间 x1 < x < x2 中的局部最小值。
x = fminbnd(fun,x1,x2,options) 使用 options 中指定的优化选项执行最小化计算。使用 optimset 可设置这些选项。
x = fminbnd(problem) 求 problem 的最小值,其中 problem 是一个结构体。

fun = @cos;%% 或者fun = @(x)cos(x);
x1 = -pi;%下限
x2 = pi;%上限
options = optimset('Display','iter');%该设置表示在求取中,显示迭代过程。
options = optimset('PlotFcns',@optimplotfval);%该设置表示在求取中,绘制迭代图。
[x,fval] = fminbnd(fun,x1,x2,options)%x是取最值的x,最值是fval。

结果分析
[x,fval,exitflag,output] = fminbnd(___)
x – 解
实数标量

fval – 解处的目标函数值
实数

exitflag – fminbnd 停止的原因
整数
在这里插入图片描述
output – 有关优化过程的信息
结构体
在这里插入图片描述

该算法的局限性
1.要计算最小值的函数必须是连续的。
2.fminbnd 只能给出局部解。
3.当解在区间的边界上时,fminbnd 可能表现出慢收敛。

为了避免混淆,其他三个函数在接下来的博客中讲解,欢迎关注,博客持续跟新。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140912.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 滑动窗口求最大值 leetcode 59

    滑动窗口求最大值 leetcode 59滑动窗口最大值问题利用递减队列实现Dequeuedequeue=newLinkedList<>();递减队列方法说明peekFirst获取队头元素pollFirsr队头元素出队offerLast==add在队尾插入新元素publicint[]maxSlidingWindow(int[]nums,intk){if(nums.length==0){returnnewint[0];}

    2022年7月13日
    17
  • Netron 下载链接

    Netron 下载链接https://github.com/lutzroeder/Netron

    2022年8月30日
    3
  • 学习使用口令激活成功教程工具:hashcat、LC、SamInside

    学习使用口令激活成功教程工具:hashcat、LC、SamInside在学习使用口令激活成功教程工具之前,我们要先创建一个用户账号,原理是利用其哈希值进行激活成功教程。很关键的一点是,要在虚拟机里面创建用户!!!很关键的一点是,要在虚拟机里面创建用户!!!很关键的一点是,要在虚拟机里面创建用户!!!重要的事情一定要说三遍。在宿主机(我是win10系统)创建用户获取的hash值是假的,根本无法用于激活成功教程。我个人猜测,是由于宿主机存在某种保护机制,使得不让获取到真正的hash。因…

    2022年7月24日
    8
  • Java并发编程高级篇(十一):执行器之处理被拒绝的任务

    Java并发编程高级篇(十一):执行器之处理被拒绝的任务

    2022年3月1日
    40
  • 圆柱体积怎么算立方公式_圆柱怎么算立方?

    圆柱体积怎么算立方公式_圆柱怎么算立方?展开全部圆柱体的立方就是求圆柱体的体积。公式为:1、圆柱定义在同一个平面内有一条定直线和一条动线e69da5e887aa3231313335323631343130323136353331333363396363,当这个平面绕着这条定直线旋转一周时,这条动线所成的面叫做旋转面,这条定直线叫做旋转面的轴,这条动线叫做旋转面的母线。如果母线是和轴平行的一条直线,那么所生成的旋转面叫做圆柱面。如果用垂直…

    2022年9月20日
    3
  • 计算机高配表要表格,为何高配电脑还会卡? 因为你没选择FreeSync套装

    计算机高配表要表格,为何高配电脑还会卡? 因为你没选择FreeSync套装可能有很多玩家在网络对战游戏中都遇到如此状况:电脑配置并不低,但游戏画面依然不够顺滑,不但经常卡顿,而且明明先瞄准敌人开枪,敌人没死而自己被秒掉。其实,这并不是因为玩家枪法太菜,问题在很大程度上出在玩家选择的显卡与显示器上。那到底玩家的显卡和显示器上到底有什么问题?让我们为大家分析一下吧。高配电脑可以提供高帧速,但并不一定无卡顿高配置的电脑当然能提供强劲的性能,在游戏中自然可以提供很高的帧速。但为…

    2022年6月1日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号