183
社区成员




clc,clear,close all;
a = -1; b =3;
ep = 0.08*(b-a);
x = a:0.1:b;
f_x = x.^2-x+2;
plot(x, f_x, 'linewidth', 1.5)
axis([-1, 3, 0, 8])
title('f(x)=x^2-x+2')
grid on;
flag = 0;
cnt = 0;
pause(0.5)
while 1
fprintf('第%d次迭代:\n', cnt)
if flag==0
x2 = a + 0.618*(b-a);
f2 = x2.^2-x2+2;
x1 = a + b - x2;
f1 = x1.^2-x1+2;
fprintf('a = %f, b = %f\n', a, b)
fprintf('x1 = %f, x2 = %f, f1 = %f, f2 = %f\n', x1, x2, f1, f2)
hold on
stem([x2, x1], [f2, f1], '--', 'linewidth', 0.8)
pause(1)
elseif flag==1
x1 = a + b - x2;
f1 = x1.^2-x1+2;
fprintf('a = %f, b = %f\n', a, b)
fprintf('x1 = %f, x2 = %f, f1 = %f, f2 = %f\n', x1, x2, f1, f2)
stem([x2, x1], [f2, f1], '--', 'linewidth', 0.8)
pause(1)
elseif flag==2
x2 = a + 0.618*(b-a);
f2 = x2.^2-x2+2;
fprintf('a = %f, b = %f\n', a, b)
fprintf('x1 = %f, x2 = %f, f1 = %f, f2 = %f\n', x1, x2, f1, f2)
stem([x2, x1], [f2, f1], '--', 'linewidth', 0.8)
pause(1)
end
if abs(b-a)<ep
xb = (a+b)/2;
disp('最优解为:')
fprintf('xb = %f, f(xb) = %f\n', xb, xb.^2-xb+2)
disp('黄金分割法一维搜索完毕.')
break
elseif f1<f2
disp('f1<f2')
b = x2;
x2 = x1;
f2 = f1;
flag = 1;
elseif f1==f2
disp('f1=f2')
a = x1;
b = x2;
flag = 0;
elseif f1>f2
disp('f1>f2')
a = x1;
x1 = x2;
f1 = f2;
flag = 2;
end
cnt = cnt + 1;
end
pause(0.5)
stem(xb, xb^2-xb+2, 'r', 'linewidth', 2)