用黄金分割算法求单变量函数f(x)在单峰区间[a,b]上的近似极小点
函数实现:
function [i,s,phis,ds,dphi,G] = golds(phi, a,b,epsilon, delta)
% 函数功能:黄金分割法精确线搜索
% 函数思想:通过试探点函数值的比较,使包含极小点的搜索区间不断缩小。
% 输入参数:phi:目标函数;a、b:搜索区间的两个端点;
% epsilon:自变量的容许误差; delta:函数值的容许误差
% 输出结果:i:迭代次数;s:近似极小点;phis:极小值;
% ds:近似极小点的误差限;dphi:极小值的误差限;
% G:ix4矩阵,第i行分别是a、p、q、b的第i次迭代值[ai,pi,qi,bi].
t = (sqrt(5)-1)/2; % 0.618,区间长度的缩短率
h = b - a;
phia = feval(phi,a); phib = feval(phi, b);
p = a + (1 - t) * h; q = a + t * h;
phip = feval(phi, p); phiq = feval(phi, q);
i = 1; G(i, :) = [a, p, q, b];
while(abs(phib - phia) > delta) || (h > epsilon)
if(phip <= phiq)
b = q;phib = phiq; q = p; phiq = phip;
h = b - a;