精确线搜索-黄金分割法
来源:互联网 发布:个人域名备案企业网站 编辑:程序博客网 时间:2024/06/02 10:41
黄金分割法1
黄金分割法
黄金分割法也称为0.618 法, 其基本思想是通过试探点函数值得比较,是包含极小点的搜索区间不断缩小. 该方法仅需要计算函数值, 适用范围广, 使用方便. 下面我们来推导0.618 法的计算公式.
设
其中
(1) 若
(2) 若
我们要求两个试探点
(1)
(2)区间长度的缩短率相同, 即
从而可得
现在考虑情形(1). 此时, 新的搜索区间为
为了进一步缩短搜索区间, 需取新的试探点
若令
则
这样, 新的试探点
解方程
因此, 我们可以写出0.618 法的计算步骤如下.
算法2 (0.618 法)
步0 确定初始搜索区间
及相应的函数值
步1若
步2计算左试探点. 若
计算
步3计算右试探点.若
计算
值得说明的是, 由于每次迭代搜索区间的收缩率是
MATLAB实现
function [s,phis,i,G,E]=huanjfg(phi,a,b,delta,epsilon)%功能: 0.618法精确线搜索%输入: phi是目标函数, a, b 是搜索区间的两个端点% epsilon delta分别是自变量和函数值的容许误差%输出: s, phis分别是近似极小点和极小值, G是nx4矩阵,% 其第i行分别是a,p,q,b的第i次迭代值[ak,pk,qk,bk],% E=[ds,dphi], 分别是s和phis的误差限.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 步0 确定初始搜索区间$[a_0,b_0]$和容许误差$0\leq \epsilon \leq1$. % 令$t=\frac{\sqrt(5)-1}{2}$计算初始试探点$$p_0=a_0+(1-t)(b_0-a_0), \ q_0=a_0+t(b_0-a_0)$$% 及相应的函数值$\phi(p_0),\phi(q_0)$。令$i=0$% 步1 若$\phi(p_i)\leq\phi(q_i)$,转步骤2;否则,转步骤3% 步2 计算左试探点. 若$\left | q_i-a_i \right |\leq \epsilon$,停算,输出$p_i$;否则,令% $$a_{i+1}=a_i,\ b_{i+1}=q_i,\ \phi(q_{i+1})=\phi(p_i),\\% q_{i+1}=p_i,\ p_{i+1}=a_{i+1}+(1-t)(b_{i+1}-a_{i+1}).$$% 计算$\phi(p_{i+1}), i=i+1,$转步骤1% 步3 计算右试探点.若$\left | b_i-p_i \right |\leq \epsilon$,停算,输出$q_i$;否则,令% $$a_{i+1}=p_i,\ b_{i+1}=b_i,\ \phi(p_{i+1})=\phi(q_i),\\% p_{i+1}=q_i,\ q_{i+1}=a_{i+1}+t(b_{i+1}-a_{i+1}).$$% 计算$\phi(q_{i+1}), i=i+1,$转步骤1t=(sqrt(5)-1)/2;p=a+(1-t)*(b-a);q=a+t*(b-a);phip=feval(phi,p);phiq=feval(phi,q);i=0;G(i+1,:)=[a p q b];while(1) %step 1 if phip<=phiq %step 2 if (abs(b-a)>epsilon)||(abs(phib-phia)>delta)% a=a; b=q;phib=phiq; phiq=phip; q=p; p=a+(1-t)*(b-a); phip=feval(phi,p); else break; end else %step 3 if (abs(b-a)>epsilon)||(abs(phib-phia)>delta) a=p;phia=phip;% b=b; phip=phiq; p=q; q=a+t*(b-a); phiq=feval(phi,q); else break; end end i=i+1; G(i+1,:)=[a p q b];endif phip<=phiq s=p; phis=phip;else s=q; phis=phiq;end% E=[ds,dphi]ds=abs(b-a);dphi=abs(phib-phia);E=[ds,dphi];
MATLAB实验结果
>> phi=@(x)((x-1)^2);>> [a,b,k]=bfm(phi,0,0.1)a = 0.3b = 1.5k = 3>> delta=0.001;epsilon=0.001;>> [s,phis,i,G,E]=huanjfg(phi,a,b,delta,epsilon);>> [s,phis,i]ans = 0.999974521703027 6.49143616637166e-10 15
取函数
大概迭代16次可得极小点
- 马昌凤. 最优化方法及其Matlab程序设计[M]. 科学出版社, 2010. ↩
阅读全文
0 0
- 精确线搜索-黄金分割法
- 精确线搜索之黄金分割法(0.618法)
- C++实现黄金分割法搜索
- 精确线搜索——抛物线法
- 非精确线搜索
- 一维搜索之黄金分割法(C#实现)
- 一维搜索的最优方法(黄金分割法)matlab程序
- 一维搜索方法(一)黄金分割法
- 非精确线搜索之Armijo搜索
- 精确搜索
- 优选法中的黄金分割法
- 黄金分割法-C语言
- 黄金分割
- 黄金分割
- 黄金分割
- 最优化第二讲——一维搜索法(黄金分割法和java实现)
- 一维搜索算法——黄金分割法原理与实现
- 使用非精确线搜索Armijo算法确定步长的最速下降法(MATLAB)
- 最小迭代学习法
- window.onload的使用
- Cookie/Session机制详解
- ssh localhost
- c++ RTTI
- 精确线搜索-黄金分割法
- Vmware虚拟机三种网络模式详解
- hdu 1284 完全背包决策数
- (部分伪)面向对象视频笔记
- 堆(heapsort)的有关概念
- 【CSP201703-4】地铁修建
- jQuery选择器
- web网页前端开发设计常用编辑器
- LATM格式