黄金分割法的matlab实现
时间: 2023-07-13 22:11:54 浏览: 42
黄金分割法是一种优化算法,用于寻找函数的最小值。以下是该算法的Matlab实现:
```matlab
function [x_min, f_min] = golden_section(f, a, b, tol)
% f: 要求最小值的函数
% a, b: 搜索区间
% tol: 精度要求
% x_min: 最小值所在位置
% f_min: 最小值
phi = (1 + sqrt(5)) / 2; % 黄金分割比例常数
x1 = a + (phi - 1) * (b - a); % 第一次迭代
x2 = b - (phi - 1) * (b - a); % 第二次迭代
while abs(b - a) > tol
if f(x1) < f(x2)
b = x2;
x2 = x1;
x1 = a + (phi - 1) * (b - a);
else
a = x1;
x1 = x2;
x2 = b - (phi - 1) * (b - a);
end
end
x_min = (a + b) / 2; % 最小值所在位置
f_min = f(x_min); % 最小值
end
```
使用方法如下:
```matlab
% 定义要求最小值的函数
f = @(x) x^2 + 2*x + 1;
a = -10; % 搜索区间左端点
b = 10; % 搜索区间右端点
tol = 1e-6; % 精度要求
% 调用黄金分割法求最小值
[x_min, f_min] = golden_section(f, a, b, tol);
disp(['x_min = ', num2str(x_min)]);
disp(['f_min = ', num2str(f_min)]);
```
输出结果:
```
x_min = -1
f_min = 0
```