matlab优化工具箱介绍
其中步长极值为:
然后只要利用三个梯度或函数方程组就可以确定系数a和b,从而可以确定α*。得到该值以后,进行搜索区间的收缩。在缩短的新区间中,重新安排三点求出下一次的近似极小点α*,如此迭代下去,直到满足终止准则为止。其迭代公式为:
其中
二次插值法的计算速度比黄金分割法的快,但是对于一些强烈扭曲或可能多峰的函数,该法的收敛速度会变得很慢,甚至失败。
2.间接法
间接法需要计算目标函数的导数,优点是计算速度很快。常见的间接法包括牛顿切线法、对分法、割线法和三次插值多项式近似法等。优化工具箱中用得较多的是三次插值法。
三次插值的基本思想与二次插值的一致,它是用四个已知点构造一个三次多项式P3(x),用它逼近函数f(x),以P3(x)的极小点作为f(x)的近似极小点。一般讲,三次插值法比二次插值法的收敛速度要快些,但每次迭代需要计算两个导数值。
三次插值法的迭代公式为
其中
如果函数的导数容易求得,一般来说首先考虑使用三次插值法,因为它具有较高的效率。对于只需要计算函数值的方法中,二次插值法是一个很好的方法,它的收敛速度较快,尤其在极小点所在区间较小时尤其如此。黄金分割法则是一种十分稳定的方法,并且计算简单。由于以上原因,Matlab优化工具箱中使用得较多的方法是二次插值法、三次插值法、二次、三次混合插值法和黄金分割法。
9.2.1.2 相关函数介绍
fminbnd
功能:找到固定区间内单变量函数的最小值。
语法:
x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
x = fminbnd(fun,x1,x2,options,P1,P2,...)
[x,fval] = fminbnd(...)
[x,fval,exitflag] = fminbnd(...)
[x,fval,exitflag,output] = fminbnd(...)
描述:
fminbnd求取固定区间内单变量函数的最小值。
x = fminbnd(fun,x1,x2)返回区间{x1,x2}上fun参数描述的标量函数的最小值x。
x = fminbnd(fun,x1,x2,options)用options参数指定的优化参数进行最小化。
x = fminbnd(fun,x1,x2,options,P1,P2,...)提供另外的参数P1,P2等,传输给目标函数fun。如果没有设置options选项,则令options=[]。
[x,fval] = fminbnd(...)返回解x处目标函数的值。
[x,fval,exitflag] = fminbnd(...)返回exitflag值描述fminbnd函数的退出条件。
[x,fval,exitflag,output] = fminbnd(...)返回包含优化信息的结构输出。
变量:
函数的输入变量在表9-7中进行描述,输出变量在表9-8中描述。与fminbnd函数相关的细节内容包含在fun,options,exitflag和output等参数中,如表9-10所示。
表9-10 参数描述表
|
参 数 |
描 述 |
|
fun |
需要最小化的目标函数。fun函数需要输入标量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如 x = fminbnd(inline('sin(x*x)'),x0) 同样,fun参数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun='myfun',则M文件函数myfun.m必须右下面的形式。 function f = myfun(x) f = ... %计算x处的函数值。 |
|
options |
优化参数选项。你可以用optimset函数设置或改变这些参数的值。options参数有以下几个选项: l ● Display – 显示的水平。选择'off',不显示输出;选择'iter',显示每一步迭代过程 l 的输出;选择'final',显示最终结果。 ● MaxFunEvals – 函数评价的最大允许次数。 l MaxIter – 最大允许迭代次数。 l TolX –x处的终止容限。 |
|
exitflag |
描述退出条件: l >0 表示目标函数收敛于解x处。 l 0 表示已经达到函数评价或迭代的最大次数。 l <0 表示目标函数不收敛。 |
|
output |
该参数包含下列优化信息: l output.iterations – 迭代次数。 l output.algorithm – 所采用的算法。 l output.funcCount – 函数评价次数。 |
算法:
fminbnd是一个M文件。其算法基于黄金分割法和二次插值法。文献[1]中给出了实现同样算法的Fortran程序。
局限性:
1.目标函数必须是连续的。
2.fminbnd函数可能只给出局部最优解。
3.当问题的解位于区间边界上时,fminbnd函数的收敛速度常常很慢。此时,fmincon函数的计算速度更快,计算精度更高。
4.fminbnd函数只用于实数变量。
参见:
fminsearch, fmincon, fminunc, optimset, inline
文献:
[1] Forsythe, G.E., M.A. Malcolm, and C.B. Moler, Computer Methods for Mathematical Computations, Prentice Hall, 1976.
9.2.1.3 应用实例
[例一] 在区间(0,2π)上求函数sin(x)的最小值:
x = fminbnd(@sin,0,2*pi)
x =
4.7124
所以区间(0,2π)上函数sin(x)的最小值点位于x=4.7124处。
最小值处的函数值为:
y = sin(x)
y =
-1.0000
磁盘中该问题的M文件名为opt21_1.m。
[例三] 对边长为3m的正方形铁板,在四个角处剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
假设剪去的正方形的边长为x,则水槽的容积为
现在要求在区间(0,1.5)上确定一个x,使
首先编写M文件opt21_3o.m:
function f = myfun(x)
f = -(3-2*x).^2 * x;
然后调用fminbnd函数(磁盘中M文件名为opt21_3.m):
x = fminbnd(@opt21_3o,0,1.5)
得到问题的解:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页

您当前的位置: