www.gusucode.com > 《图像配准技术及其Matlab编程实现》--源码程序 > 《图像配准技术及其Matlab编程实现》/match/GoldSectionOptimize.m
function [minfx,x]=GoldSectionOptimize %%进退法确定搜索区间 x1=rand; h=0.1; L=0.0001; Fx1=Fx(x1); k=0; while(1) x4=x1+h; Fx4=Fx(x4); k=k+1; if Fx4<Fx1 x2=x1; x1=x4; Fx2=Fx1; Fx1=Fx4; h=2*h; else if k~=1 x3=x2; x2=x1; x1=x4; if x1<=x3 a=x1; %确定搜索区间[a b] b=x3; else a=x3; b=x1; end break; else h=-h; x2=x4; Fx2=Fx4; end end end %黄金分割法搜索 landa=a+0.382*(b-a); mu=a+0.618*(b-a); flanda=Fx(landa); fmu=Fx(mu); n=0; while(1) if b-a<L a=a; b=b; x=(b+a)/2; break; end if flanda>fmu flanda=fmu; a=landa; b=b; landa=mu; mu=a+0.618*(b-a); fmu=Fx(mu); else fmu=flanda; a=a; b=mu; mu=landa; landa=a+0.382*(b-a); flanda=Fx(landa); end end minfx=Fx(x); %返回目标函数最小值 function [y]=Fx(x); y=(x+500)^2+5;