📄 goldsection.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -