%黄金分割法
clear all
clc
f=@(x)4*x^3-5*x+10;
a=0.3;
b=1.5;
Theta_error=0.0001;
x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
y1=feval(f,x1);
y2=feval(f,x2);
stepNum=0;
k=stepNum;
Da=[];
Db=[];
Dx1=[];
Dx2=[];
Dy1=[];
Dy2=[];
while abs(b-a)>Theta_error
stepNum=stepNum+1;
k=stepNum;
if y1<y2
b=x2; Db(k)=b;
x2=x1; Dx2(k)=x2;
y2=y1; Dy2(k)=y2;
x1=a+0.382*(b-a); Dx1(k)=x1;
y1=feval(f,x1); Dy1(k)=y1;
else
a=x1; Da(k)=a;
x1=x2; Dx1(k)=x1;
y1=y2; Dy1(k)=y1;
x2=a+0.618*(b-a); Dx2(k)=x2;
y2=feval(f,x2); Dy2(k)=y2;
end
x_opt=(a+b)/2;
f_opt=feval(f,x_opt);
plot(x_opt,f_opt,'p')
hold on
end
x_opt=(a+b)/2;
f_opt=feval(f,x_opt);
x=0:0.00001:1.5;
y=4*x.^3-5*x+10;
plot(x,y,'k')
hold on
plot(x_opt,f_opt,'r*')