clc;clear;
syms x
f =3*x^4-16*x^3+30*x^2-24*x+8;
alpha =0.618;
a0 = 0;
b0 = 3;
v =a0+(1-alpha)*(b0-a0);
u =a0+alpha*(b0-a0);
while(1)
if b0 - a0<1e-4
xx = 1/2*(a0+b0);break;
end
fv = subs(f,x,v);
fu = subs(f,x,u);
if fv>fu
a0 = v;
v = u;
u = a0+alpha*(b0-a0);
else
b0 = u;
u = v;
v = a0+(1-alpha)*(b0-a0);
end
end
fprintf('0.618法求得的极小值为%9.9f\n',xx)
程序输出结果:
0.618法求得的极小值为2.000001513