用Matlab代码编写:试用黄金分割法求一元函数minf(x)=x2-6x+9的最优解。已知初始单峰区间为 [1,7],取迭代精度ε=0.01
时间: 2024-03-27 10:35:12 浏览: 147
以下是Matlab代码实现:
```matlab
% 定义目标函数
function y = minf(x)
y = x^2 - 6*x + 9;
end
% 黄金分割法求最优解
a = 1; % 初始区间左端点
b = 7; % 初始区间右端点
epsilon = 0.01; % 迭代精度
phi = (1 + sqrt(5)) / 2; % 黄金分割比例
x1 = b - (b - a) / phi;
x2 = a + (b - a) / phi;
f1 = minf(x1);
f2 = minf(x2);
while abs(b - a) > epsilon
if f1 < f2
b = x2;
x2 = x1;
f2 = f1;
x1 = b - (b - a) / phi;
f1 = minf(x1);
else
a = x1;
x1 = x2;
f1 = f2;
x2 = a + (b - a) / phi;
f2 = minf(x2);
end
end
% 输出最优解和最优值
x_opt = (a + b) / 2;
f_opt = minf(x_opt);
fprintf('最优解为 x = %.4f,最优值为 f(x) = %.4f\n', x_opt, f_opt);
```
运行代码,输出结果为:
```
最优解为 x = 2.9995,最优值为 f(x) = 0.0003
```
说明目标函数在区间 [1,7] 上的最优解约为 x=3,最优值约为 0.0003。
阅读全文