黄金搜索法无约束最优化.docx
16页第一题:编程实现以下科学计算算法,并举一例应用之参考《精通 MATLAB 科学计算》,王正林等著,电子工业出版社,2009 年)“黄金搜索法无约束最优化”1 算法说明 :1.在MATLAB中编程实现的黄金搜索算法为:Opt_Golden2.功能:黄金搜索算法求区间上的无约束最优化解3.调用格式: [x0,f0]=Opt_Golden(f,a,b,TolX,TolFun,K)其中,f为函数名;a 为搜索区间的起始点;b 为搜索区间的终止点;TolX 为最优值点区间的误差阈值;TolFun为函数的阈值;k 为最大跌代次数;x0 为最优化点值;f0 为函数在 x0 处的函数值Q算法原理黄金搜索法也叫 0.618 法,适用于求解如下形式的最优化问题:minf(x), x G [a,b]其中a,b已知,且f(x)在区间内为单峰函数【1】,也就是说在区间内最多改变一次,因此 该类最优化问题可等价于求解x *,使f(x)分别在区间[a, x * ]上单调减,在[x *,b] 上单调增显然x*是f(x)在区间L*, b】上的唯一的极小值点⑥算法设计思路:①:设f(x)是区间la, b]上的(下)单峰函数,x*是f(x)在区间[„, b]上的唯一的 极小值点,对任意x (i = 1,2,3) g [a, b], x < x < x,右i 1 2 3f (x ) > f (x ), f (x ) > f (x ),则必有 x * g [x , x ];1 2 3 2 1 3©:设f (x)是区间[a, b]上的(下)单峰函数,x*是f (x)在区间[a, b]上的唯一的极 小值点,对任意 x (i = 1,2) g [a, b], x < x,若 f (x ) < f (x ),贝U必有 x* g [a, x ];i 1 2 1 2 2若f (x ) > f (x ),则必有x* g [x , b]。
如此反复进行迭代,缩小最优值范围,直至两1 2 1点区间长度小于给定的最优点间的误差阀值以及两端点函数值之差的绝对值小于给定的函 数误差阀值Q算法步骤黄金搜索法的基本求解流程如下步骤 1:在空间[a,b]中取两点 c=a-rh和 d=a+rh,其中 r=(sqrt(5)-l)/2,h=b-a;步骤2 f(x)在这两点的值几乎相等并且区间的宽度充分小,则停止跌代跳出循环;并令 x*=c.(f(c) f(d)) 或 x*=d (f(c)>f(d)) ,否则跳到步骤 3;步骤3:如果f (c) 黄金搜索法的 MATLAB 编程现如下:Function [x0,f0]=Opt_Golden(f,a,b,TolX,TolFun,k)%黄金搜索算法求在区间[a,b]上的最优化解;%f 为函数名;%a 为搜索区间的起始点;%b 为搜索区间的终止点;%TolX为最优值点区间的误差阈值;%TolFun为函数的阈值;%k 为最大跌代次数;%x0 为最优化点值;%f0 为函数在 x0 处的函数值r=(sqrt(5)-1)/2; %r 为黄金分割点h=b-a; %区间宽度rh=r*h;%取两点c,d,并计算相应的函数值fc和fd c=b-rh;d=a+rh;fc=feval(f,c);fd=feval(f,d);%%%算法第二步判断是否停止跌代if k<=0 | (abs(h) 采用黄金搜索法求解如下 表达式的最小值:f(x)=x2-2x+3, x [0,3]A:流程图B:应用举例程序源代码:编写M文件 :exam1.mfunction f=exam1(x)fl二inline('x.“2-2 *x+3','x');a=0;b=3;TolX=le-4;TolFun=le-4;k=l00;[x0,f0]=Opt_Golden(fl,a,b,TolX,TolFun,k)File Edit Text Cell Tools Debug Desktop Window Help ? x□ 為■魏门c|寻|風化|昌老]|* ■■淫]■ Stack: | Base~h5 -6 -function f=examl(x)f l = inline C x. ”2一2*超+$' /x);a=0;b=3;TolX=le-4;TolFun=le_4;k=100;[xOj f 0] =0pt_Golden (fl, a, b TolX, TolFun^ k)M 文件如上图x Command Windowexaml>>TxO1. 0000fO2. 0000运行结果如上图所示:2. 源代码:work2.mfunctionppx=[10013416418019819518616013610066351505173263100];y=[503525514.3451326.5188.692.259.662.2102.7147.1191.6236280.5324.9369.4413.8458.3503];i=[0:pi/9:pi*2];xx=csape(i,x,'periodic'); % 生成周期性边界条件(不用给边界值)下的三次样条插值.其中,(I,x)为数据向量□ tlsln'wJ_®€0 厳仝砸3的口 dQjIIMOPU 一51cle-vscdqisooi tCDsuj Mcu>l4-pljjiCD-'IZI—— I 巴 nmirF^s张氷g>mx¥_-s(>)a5qewsa5qe_xA ;「>_><—二 dd>>ddx)10-d =三 xx)-e>ddudd>==>





