一、介绍
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
选择的影响。
结语
人心生一念,天地悉皆知
善恶若无报,乾坤必有私
!!!