goldsection.m

来自「黄金分割法求解下单峰函数的极小值 是一个比较好的代码」· M 代码 · 共 43 行

M
43
字号
function answ = goldsection(a,b,eps)
% 黄金分割法实现一维搜索
% a   ---- 搜索区间左端点
% b   ---- 搜索区间右端点
% eps ---- 搜索精度

% CopyRight@XiaBo
% Date:

% 寻找初始分割点
x1=a+.382*(b-a);
x2=a+.618*(b-a);

% 搜索主体
while(abs(b-a)>eps) 
    % 计算分割点处的函数值
    f1=fun(x1);
    f2=fun(x2);
    
    % 比较判断两个分割点处的函数值,进而缩短区间长度
    if(f1>f2)
       a=x1;
       x1=x2;
       x2=a+.618*(b-a);
    elseif(f1==f2) 
       a=x1;
       b=x2;
       x1=a+.382*(b-a);
       x2=a+.618*(b-a);
    else
       b=x2;
       x2=x1;
       x1=a+.382*(b-a);
    end
end
% 返回搜索值
answ=(a+b)/2;

%% 定义搜索函数fun
function f = fun(x)   % 这里是一个简单的函数定义,倘若在一个大型的优化计算中,这个函数一般是和第k步的迭代点和下降方向有关的
% 是一个关于步长的函数
% x --- 步长值
f = x^2-x+2;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?