一、介绍

  fminsearch 是 MATLAB 中用于寻找单变量或多变量函数局部最小值的函数,它不需要函数的导数信息,属于无导数优化方法的一种。该函数通过单纯形搜索(simplex search)算法来工作,单纯形是n维空间中的一个n+1顶点的多面体。在每一步迭代中,算法都会尝试更新单纯形的形状和位置,以朝着目标函数值减小的方向移动,直到找到满足一定停止条件的局部最小值点。

二、函数语法

fminsearch 的基本语法如下:

x = fminsearch(fun,x0)  
x = fminsearch(fun,x0,options)  
[x,fval] = fminsearch(...)  
[x,fval,exitflag,output] = fminsearch(...)

  • fun 是待优化的函数,它接受一个向量 x 作为输入,并返回一个标量,即函数在 x 处的值。
  • x0 是搜索的起始点,一个n维向量。
  • options 是用于控制优化过程的选项结构体(可选)。
  • x 是找到的最小值点。
  • fval 是在 x 处的函数值。
  • exitflag 描述了算法退出的条件。
  • output 提供了优化过程的详细信息。

三、示例

       假设我们想要找到函数 f(x,y)=(x−1)2+(y−2)2 的局部最小值,这个函数实际上有一个全局最小值在 (1,2)。

       我们可以定义这个函数并使用 fminsearch 来找到它的最小值点:

function z = myfun(x)  
    z = (x(1) - 1)^2 + (x(2) - 2)^2;  
end  
  
% 初始猜测  
x0 = [0, 0];  
  
% 执行fminsearch  
[x_min, fval] = fminsearch(@myfun, x0);  
  
% 显示结果  
disp(['最小值点: ', num2str(x_min)]);  
disp(['最小值: ', num2str(fval)]);

       在这个例子中,@myfun 是一个指向我们定义的 myfun 函数的句柄,x0 是我们选择的初始点。fminsearch 会从 x0 开始搜索,并返回它找到的最小值点 x_min 和该点处的函数值 fval

四、注意 

       请注意,由于 fminsearch 使用的是局部搜索算法,因此它只能保证找到局部最小值,而不一定是全局最小值。此外,算法的效率和效果也会受到初始点 x0 选择的影响。

 结语  

人心生一念,天地悉皆知

善恶若无报,乾坤必有私

!!! 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐