Nelder-Mead算法适合变量数不是很多的方程求极值.
原理:Nelder-Mead法是利用多面体来逐步逼近最佳点x*.设函数变量为n维,则在n维空间里多面体有(n+1)个顶点.设x1,x2,...,xn+1为多面体的顶点,且满足:
f(x1)<=f(x2)<=...<=f(xn+1)
Nelder-Mead法试着将多面体中最差的顶点xn+1(也就是函数的最大点)以新的最佳点替代,来更新多面体,使之逼近最佳解.更新的设定方式有四种,分别是:反射,扩展,外收缩,内收缩.如果这四种方法都不适用,则进行变小步骤.
算法实现:
matlab里面有个函数叫做fminsearch就是用这个算法实现的
在matlab中编程实现Nelder-Mead算法为:Opt-Nelder.
功能:Nelder-Mead算法求无约束最优化解.
调用格式:[xo,fo]=Opt_Nelder(f,x0,TolX,TolFun,MaxIter).
其中,f为函数名;
x0为搜索初值;
TolX为最优值点间的误差阈值;
TolFun为函数的误差阈值;
xo为最优化点值;
fo为函数在点xo处的函数值;
算法程序分Nelder0.m和Opt-Nelder.m其中子程序Nelder0.m用于二维空间上的多边形最优化逼近.对于大于2维的情形,可以通过若干次二维迭代计算求出最优值.Opt-Nelder.m可求解若干维变量的最优化问题.
(1)Nelder0.m
function [xo,fo]=Nelder0(f,abc,fabc,TolX,TolFun,k)
%二维空间中的多边形逼近
% f:函数名
% abc:二维空间三个顶点值
% fabc:三个顶点处的函数