25.3 matlab里面的10中优化方法介绍——Nelder-Mead法(matlab程序)

1. 简述

fminsearch函数用来求解多维无约束的线性优化问题

用derivative-free的方法找到多变量无约束函数的最小值

语法

x = fminsearch(fun,x0)

x = fminsearch(fun,x0,options)

x,fval\] = fminsearch(...) \[x,fval,exitflag\] = fminsearch(...) \[x,fval,exitflag,output\] = fminsearch(...) 解释 fminsearch能够从一个初始值开始,找到一个标量函数的最小值。通常被称为无约束非线性优化 x = fminsearch(fun,x0) 从x0开始,找到函数fun中的局部最小值x,x0可以是标量,向量,矩阵。fun是一个函数句柄 x = fminsearch(fun,x0,options) 以优化参数指定的结构最小化函数,可以用optimset函数定义这些参数。(见matlab help) \[x,fval\] = fminsearch(...)返回在结果x出的目标函数的函数值 \[x,fval,exitflag\] = fminsearch(...) 返回exitflag值来表示fminsearch退出的条件: 1--函数找到结果x 0--函数最大功能评价次数达到,或者是迭代次数达到 -1--[算法](http://lib.csdn.net/base/datastructure "算法")由外部函数结束 \[x,fval,exitflag,output\] = fminsearch(...) 返回一个结构输出output,包含最优化函数的信息:output.algorithm 使用的优化算法 output.funcCount 函式计算次数 output.iterations 迭代次数 output.message 退出信息 另外 fun是需要最小化的函数,他的输入为input,输出为标量f,**目标函数在x上作出估计,函数可以为M文件的一个句柄函数(当是M文件时,用单引号括起文件名)**: functionx = fminsearch(@myfun, x0) 这里function f = myfun(x) f = ... 其自变量为x 或者直接写出 asx = fminsearch(@(x)sin(x\^2), x0); 算法 fminsearch使用单纯型法,这是一种不会使用数值或者梯度分析的直接的方法 假如x的长度为n,那么会有n+1个顶点,两维空间中,单纯型是三角形,三维空间,他是一个锥形。搜索的每一步中,都会产生离当前单纯型比较近的点,在新的点上的函数值回合单纯型各个顶点上的值比较,一般都会有一个定点被替代,产生一个新的单纯型,重复步骤,直到单纯型的大小小于阈值。 限制 fminsearch可以处理不连续的问题,如果得不到全局最优,则其会得到局部最优 它只能最小化时数,复数并不在其能力范围之内,且f(x)的返回值也必须是时数,如果x为复数,则其必须分解为实部和虚部两部分。 我们可以稍微对进行一些变换,就可实现利用fminsearch进行参数估计。 **2.** **代码** **主程序:** %% 用Nelder-Mead方法求最优化解 f1203 = inline('x(1)\*(x(1)-5-x(2))+x(2)\*(x(2)-4)','x'); x0 = \[0 4\]; TolX = 1e-4; TolFun = 1e-9; MaxIter = 100; \[xN,fN\] = Opt_Nelder(f1203,x0,TolX,TolFun,MaxIter) %取最小值点以及此处的最小值 \[xF,fF\] = fminsearch(f1203,x0) %用MATLAB内置函数fminsearch求解 子程序; function \[xo,fo\] =Opt_Nelder(f,x0,TolX,TolFun,MaxIter) %Nelder-Mead法用于多维变量的最优化问题,维数\>=2. N = length(x0); if N == 1 %一维情况,用二次逼近计算 \[xo,fo\] = Opt_Quadratic(f,x0,TolX,TolFun,MaxIter); return end S = eye(N); for i = 1:N %自变量维数大于2时,重复计算每个子平面的情况 i1 = i + 1; if i1 \> N i1 = 1; end abc = \[x0; x0 + S(i,:); x0 + S(i1,:)\]; %每一个定向子平面 fabc = \[feval(f,abc(1,:)); feval(f,abc(2,:)); feval(f,abc(3,:))\]; \[x0,fo\] = Nelder0(f,abc,fabc,TolX,TolFun,MaxIter); if N \< 3 %二维情况不需重复 break; end end xo = x0; **3.** **运行结果** ![02fff0129228438c9b55644fdd68bd51.png](https://file.jishuzhan.net/article/1684103715033714690/ce907f4abe0f4d159c5e3401bbcc5aed.png) ![81fd1919a7e04582bfd517f654f1a701.png](https://file.jishuzhan.net/article/1684103715033714690/f9159c2aa90347429f21989ddf81d12c.png)

相关推荐
XM_jhxx6 分钟前
±0.03mm的精度怎么保证?翌东塑胶用AI赋能质量管控升级
人工智能
阿正的梦工坊37 分钟前
深入理解 PyTorch 中的 unsqueeze 操作
人工智能·pytorch·python
澈2072 小时前
C++并查集:高效解决连通性问题
java·c++·算法
秦歌6662 小时前
DeepAgents框架详解和文件后端
人工智能·langchain
郝学胜-神的一滴3 小时前
Qt 入门 01-01:从零基础到商业级客户端实战
开发语言·c++·qt·程序人生·软件构建
测试员周周3 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
霸道流氓气质3 小时前
基于 Milvus Lite 的 Spring AI RAG 向量库实践方案与示例
人工智能·spring·milvus
旖-旎3 小时前
深搜练习(单词搜索)(12)
c++·算法·深度优先·力扣
ar01233 小时前
AR巡检平台:构筑智能巡检新模式的数字化引擎
人工智能·ar
语音之家3 小时前
【预讲会征集】ACL 2026 论文预讲会
人工智能·论文·acl