matlab实验1-黄金分割法
golds.m:
function [xmin, fmin] = golds(func, a, b, epsilon)
% 初始化参数
maxIter = 1000; % 最大迭代次数
iter = 0; % 迭代计数器
% 计算黄金比例
phi = (1 + sqrt(5)) / 2;
c = b - (b - a) / phi;
d = a + (b - a) / phi;
% 输出表头
fprintf('迭代次数\t a\t b\t c\t d\t f(c)\t f(d)\n');
while (b - a) > epsilon && iter < maxIter
iter = iter + 1;
% 计算函数值
fc = func(c);
fd = func(d);
% 输出当前迭代结果
fprintf('%d\t %f\t %f\t %f\t %f\t %f\t %f\n', iter, a, b, c, d, fc, fd);
% 更新区间
if fc < fd
b = d;
d = c;
c = b - (b - a) / phi;
else
a = c;
c = d;
d = a + (b - a) / phi;
end
end
% 输出最终结果
if iter < maxIter
fprintf('找到极小值点: x = %f, 极小值: f(x) = %f\n', c, fc);
xmin = c;
fmin = fc;
else
fprintf('未能在最大迭代次数内找到解\n');
xmin = NaN;
fmin = NaN;
end
end
golds_main.m:
% 目标函数
f = @(x) x.^2 - x + 6;
% 调用golds函数
[xmin, fmin] = golds(f, 0, 1, 1e-6);
% 显示结果
disp(['极小值点: ', num2str(xmin)]);
disp(['极小值: ', num2str(fmin)]);

浙公网安备 33010602011771号