>>文章导航
1. 题目
2. 代码
function [xmin, fmin] = golden_section_method(f, a, b, tol)
% golden_section_method 使用黄金分割法来最小化函数f在区间[a, b]
%tol是区间精度
c = (b - a) * (2 - sqrt(5)) / (2 * sqrt(5)); % 计算第一个黄金分割点
d = (b + a) / 2; % 计算中点
while abs(b - a) > tol
if f(c) < f(d) % 如果第一个黄金分割点比中点更优
a = c;
c = (b - a) * (2 - sqrt(5)) / (2 * sqrt(5)); % 计算下一个黄金分割点
else % 否则,中点更优
b = d;
d = (b + a) / 2; % 更新中点
end
end
xmin = (a + b) / 2; % 计算最优解
fmin = f(xmin); % 计算最小值
end
% Test function
f = @(x) x^2 - x - 1;
a = -1; % 初始区间左端点
b = 1; % 初始区间右端点
tol = 0.05; % 区间精度
[xmin, fmin] = golden_section_method(f, a, b, tol); % 调用黄金分割法函数求解
disp(['xmin = ', num2str(xmin)]); % 输出最优解
disp(['fmin = ', num2str(fmin)]); % 输出最小值