您当前的位置:matlab资源网文章中心资料 → 文章内容

matlab优化工具箱介绍

作者:佚名  来源:转载转自:http://www.madio.net/Article/Class36/Class5/200507/946.html  发布时间:2008-4-12 22:15:24

    其中步长极值为:

然后只要利用三个梯度或函数方程组就可以确定系数ab,从而可以确定α*。得到该值以后,进行搜索区间的收缩。在缩短的新区间中,重新安排三点求出下一次的近似极小点α*,如此迭代下去,直到满足终止准则为止。其迭代公式为:

其中

二次插值法的计算速度比黄金分割法的快,但是对于一些强烈扭曲或可能多峰的函数,该法的收敛速度会变得很慢,甚至失败。

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]  下一页

文章评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -