黄金搜索法是一种无须函数导数的数值优化方法。它基于黄金分割比例来选择新的搜索区间,以逐步缩小搜索范围并逼近极值点。在每次迭代中,算法会根据当前搜索区间的长度和黄金分割比例来计算两个新的点,并在这两个点处评估函数值。然后,根据这两个点的函数值比较结果,选择包含更优解(即更接近极值点)的那个区间作为新的搜索区间。
黄金搜索法不需要函数的导数信息,因此适用于函数不可导或者计算导数困难的情况。
代码如下:
function Golden_Section_Search(a, b, f, tol)
% 项目名称:黄金分割搜索法
% 更新时间:2024/09/04
% 背景:美国数学家Jack Kiefer在1953年提出了这种搜索方法,用于在一维空间中寻找函数的极值点。黄金比例概念最早由古希腊的毕达哥拉斯提出。
% 作者:月白风清江有声
if a >= b
error('Must have a < b');
end
lambda = 0.618;
x1 = b - lambda * (b - a);
x2 = a + lambda * (b - a);
k = 0;
while abs(b - a) > tol
f_x1 = f(x1);
f_x2 = f(x2);
l = abs(b - a);
k = k + 1;
fprintf('num %d: a = %.4f, b = %.4f, f(x1) = %.4f, f(x2) = %.4f, l = %.4f\n', k, a, b, f_x1, f_x2, l);
if f_x1 < f_x2
b = x2;
x2 = x1;
x1 = a + lambda * (b - a);
else
a = x1;
x1 = x2;
x2 = b - lambda * (b - a);
end
end
alpha = (a + b) / 2;
fprintf('Final min result: a = %.4f, b = %.4f, alpha = %.4f\n', a, b, alpha);
end
% 示例用法
% 定义函数句柄
%f = @(x) 2*x^4 + x + 1;
% 调用黄金分割搜索法
%Golden_Section_Search(-2, 0, f, 0.1);
标签:4f,%.,复制粘贴,开源,搜索,matlab,x2,x1,lambda
From: https://blog.csdn.net/ws13563798156/article/details/142100384