在数学上,可以通过确定函数导数为零的点来确定极值点;但是在解析上难以求导的情况下,需要从数值上寻找函数的极值点。MATLAB为用户提供了两个完整功能的函数fminbnd和fmins来实现对一维和n维函数的最小值的求解。
值得注意的是,MATLAB并未向用户提供求最大值的命令,因为函数f(x)的最大值就是函数-f(x)的最小值,故fminbnd函数可用来求最大值和最小值。
1.一元函数的极小值
fimbnd函数用于查找单变量函数在确定区间上的最小值,它的调用格式如下:
x=fminbnd(fun,x1,x2):返回一个值x,该值是fun中描述的标量值函数在区间x1<x<x2中的局部最小值。
x=fminbnd(fun,x1,x2,options):options为指定优化参数选项,由OPTIMSET设定,具体取值见表4.6。
表4.6 options参数的取值
[x,fval]=fminbnd(…):fval为目标函数的最小值。
[x,fval,exitflag]=fminbnd(…):返回描述退出条件的值exitflag。若参数exitflag>0,表示函数收敛于x;若exitflag=0,表示达到了最大迭代次数;若exitflag<0,表示函数不收敛于x。
[x,fval,exitflag,output]=fminbnd(…):返回一个包含有关优化的信息的结构体output。若参数output=iterations,表示迭代次数;若output=funccount,表示函数赋值次数;若output=algorithm,表示所使用的算法。
【例4.16】 求sin(x)在0<x<2π范围内的最小值的点。
在MATLAB的命令行窗口中输入以下命令,并得出结果。
2.多元函数的极小值(www.xing528.com)
MATLAB为用户提供了fminsearch函数用于计算多元函数的极小值,该函数适用于不太平滑、难以计算梯度信息或梯度信息价值不大的函数。
fminsearch函数和fminbnd函数的用法基本一致,两个不同之处在于:fminbnd函数的输入参数是寻找最小值的区间,且仅可以求解一元函数的极值;而fminsearch函数的输入参数为初始值。
fminsearch函数的调用格式如下:
x=fminsearch(fun,x0):在点x0处开始并尝试求函数fun中的局部最小值x。
x=fminsearch(fun,x0,options):使用结构体options中指定优化选项求最小值。
x=fminsearch(problem):求结构体problem的最小值。
[x,fval]=fminsearch(…):fval返回目标函数fun在解x处的值。
[x,fval,exitflag]=fminsearch(…):返回描述退出条件的值exitflag。
[x,fval,exitflag,output]=fminsearch(…):返回结构体output及优化过程的信息。
【例4.17】 求函数y(x)=100(x2-x21)2+(1-x1)2的最小值。
由题意得,函数的最小值在(1,1)处取得,最小值为0。
在MATLAB的命令行窗口中输入以下命令,并得出结果。
从结果可知,函数的最小值在(1,1)点取得,极小值近似于0。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。