利用fminbnd函数可以找到固定区间内单变量函数的最小值。其语法格式为:
x = fminbnd(fun,x1,x2):返回区间{x1,x2}中fun描述的标量函数的最小值x。
x = fminbnd(fun,x1,x2,options):用options参数指定的优化参数进行最小化。如果没有设置options选项,则令options=[ ]。
[x,fval] = fminbnd(...):返回解x处目标函数的值。
[x,fval,exitflag] = fminbnd(...):返回exitflag值描述fminbnd函数的退出条件。
[x,fval,exitflag,output] = fminbnd(...):返回包含优化信息的结构output。
与fminbnd函数有关的细节设置包含在fun、options、exitflag和output等参数中,如表1-1所示。
表1-1 参数描述表
| 参 数 | 描 述 |
|---|---|
| fun | 需要最小化的目标函数。fun函数需要输入标量参数x,返回x处的目标函数的标量f。可以将fun函数作为M文件函数的函数句柄,如
x = fminbnd(@myfun,x0)
其中myfun为具有下面形式的MATLAB函数:
function f = myfun(x)
f = ... %计算x处的函数值
fun函数也可以是匿名函数的函数句柄,即
x=fminbnd(@(x)sin(x 2),x1,x2) |
| options | 优化参数选项。可以用optimset函数设置或改变这些参数的值。options参数有以下几个选项: Display:显示的水平。选择'off',不显示输出;选择'iter',显示每一步迭代过程的输出;选择'final', 显示最终结果。 FunValCheck:检查目标函数值是否合法。值为'on'时,如果目标函数返回的值为复数或NaN,则给出一则警告信息;值为'off'时,不显示警告信息。 MaxFunEvals:函数评价的最大允许次数。 MaxIter:最大允许迭代次数。 OutputFcn:指定每次迭代时优化函数调用的自定义函数。 PlotFcn:算法执行过程中进行绘图。 TolX:x处的终止容限。 |
| exitflag | 描述退出条件: 1:表示目标函数收敛于解x处 0:表示已经达到函数评价或迭代的最大次数 -1:表示算法被输出函数终止 -2:边界不一致,相互矛盾 |
| output | 该参数为包含优化信息的结构,其字段为: Iterations:迭代次数 Algorithm:所采用的算法,黄金分割法或二次多项式插值。 funcCount:函数评价次数 message:退出消息 |
fminbnd函数是一个M文件,其算法基于黄金分割法和抛物线插值搜索法。除非左边界点x1和右边界点x2靠得非常近,否则fminbnd函数不计算边界处的fun函数值,所以fun函数只需要在区间x1<x<x2内进行定义。如果最小值落在x1或x2上,则fminbnd函数返回一个内点,该内点与x1或x2的距离不超过2TolX,其中TolX为终止容限。
注意:
(1)目标函数必须是连续的;
(2)fminbnd函数可能只给出局部最优解;
(3)当问题的解位于区间边界上时,fminbnd函数的收敛速度往往很慢。此时,fmincon函数的计算速度更快,计算精度更高;
(4)fminbnd函数只用于实数变量。