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 可能表现出慢收敛。

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

  • 54
    点赞
  • 230
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Matlab中可以使用不同的函数来求解最优化问题,具体使用哪个函数取决于问题的类型和约束条件。一些常用的函数包括: 1. linprog函数用于解决线性规划问题。它的语法是[x,fval,exitflag,output]=linprog(f,A,b,Aeq,beq,lb,ub),其中f是目标函数的系数,A和b是不等式约束的系数矩阵和常数向量,Aeq和beq是等式约束的系数矩阵和常数向量,lb和ub是变量的上下界。 2. quadprog函数用于解决二次规划问题。它的语法是[x,fval,exitflag,output]=quadprog(H,f,A,b,Aeq,beq,lb,ub),其中H是二次目标函数的Hessian矩阵,其他参数的含义与linprog函数相同。 3. fminbnd函数用于一元无约束优化计算。它的语法是[x,fval]=fminbnd(fun,x1,x2,options),其中fun是目标函数的句柄,x1和x2是搜索区间的上下界,options是优化选项。 4. fmincon函数用于求解带约束的优化问题。它的语法是[x,fval,exitflag,output]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options),其中fun是目标函数的句柄,x0是初始解,A、b、Aeq、beq、lb、ub是约束矩阵和向量,nonlcon是非线性约束函数的句柄,options是优化选项。 5. fseminf函数用于求解半定规划和二次半定规划问题。它的语法是[x,fval,exitflag,output]=fseminf(fun,x0,A,b,Aeq,beq,LB,UB,options),其中fun是目标函数的句柄,x0是初始解,A、b、Aeq、beq是约束矩阵和向量,LB和UB是变量的下界和上界,options是优化选项。 6. fminmax函数用于求解最小最大化问题。它的语法是[x,fval,exitflag,output]=fminmax(fun,x0,A,b,Aeq,beq,lb,ub,options),其中fun是目标函数的句柄,x0是初始解,A、b、Aeq、beq、lb、ub是约束矩阵和向量,options是优化选项。 通过选择适当的函数和参数,可以根据具体的优化问题来求解最优解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Matlab 最优化求解](https://blog.csdn.net/weixin_46649908/article/details/118420583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [matlab求解最优化问题(数学建模)](https://blog.csdn.net/wmx1117/article/details/106612537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值