function f=fun(x)
f=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2;
function f=fx(x0,alpha,s)
x1=x0+alpha*s;
f=fun(x1);
function f=fsearch(x0,s)
%利用进退法确定高低高区间
alpha1=0;
h=0.1;
alpha2=alpha1+h;
f1=fx(x0,alpha1,s);
f2=fx(x0,alpha2,s);
if f1>f2
alpha3=alpha2+h;
f3=fx(x0,alpha3,s);
while f2>f3
alpha1=alpha2;
alpha2=alpha3;
alpha3=alpha3+h;
f2=f3;
f3=fx(x0,alpha3,s);
end
else
h=-h;
v=alpha1;
alpha1=alpha2;
alpha2=v;
v=f1;
f1=f2;
f2=v;
alpha3=alpha2+h;
f3=fx(x0,alpha3,s);
while f2>f3
alpha1=alpha2;
alpha2=alpha3;
alpha3=alpha3+h;
f2=f3;
f3=fx(x0,alpha3,s);
end
end
a=min(alpha1,alpha3);
b=max(alpha1,alpha3);
%利用黄金分割点法求解
alpha1=a+0.382*(b-a);
alpha2=a+0.618*(b-a);
f1=fx(x0,alpha1,s);
f2=fx(x0,alpha2,s);
while abs(a-b)>0.001
if f1>f2
a=alpha1;
alpha1=alpha2;
f1=f2;
alpha2=a+0.618*(b-a);
f2=fx(x0,alpha2,s);
else
b=alpha2;
alpha2=alpha1;
f2=f1;
alpha1=a+0.382*(b-a);
f1=fx(x0,alpha1,s);
end
end
f=0.5*(a+b);
clear
%初始点
x0=[0;0];
%搜索方向
e1=[1;0];
e2=[0;1];
G0=fun(x0);
F0=G0;
%第一次迭代
%沿着e1
alpha1=fsearch(x0,e1);
x1=x0+alpha1*e1;
F1=fun(x1);
delta1=F0-F1;
% 沿着方向e2;
alpha2=fsearch(x1,e2);
x2=x1+alpha2*e2;
F2=fun(x2);
G2=F2;
delta2=F1-F2;
deltam=max(delta1,delta2);
%映射点
x3=2*x2-x0;
G3=fun(x3);
if G3
^2
s=x2-x0;
%方向替换
e1=e2;
e2=s;
% 沿着方向s 进行搜索
alpha3=fsearch(x2,s);
x3=x2+alpha2*s;
x0=x3;
else
if F2>G3
x0=x3;
else
x0=x2;
end
End
子文件JT,JH
进退法程序代码?56555 .
function [minx,maxx] = minJT(f,x0,h0,eps)
format long;
if nargin == 3
eps = 1.0e-6;
end
x1 = x0;
k = 0;
h = h0;
while 1
x4 = x1 + h;
k = k+1;
f4 = subs(f, findsym(f),x4);
f1 = subs(f, findsym(f),x1);
if f4 < f1
x2 = x1;
x1 = x4;
f2 = f1;
f1 = f4;
h = 2*h;
else
if k==1
h = -h;
x2 = x4;
f2 = f4;
else
x3 = x2;
x2 = x1;
x1 = x4;
break;
end
end
end
minx = min(x1,x3);
maxx = x1+x3 - minx;
format short;
黄金分割法程序代码?56555 .
function [x,minf] = minHJ(f,a,b,eps)
format long;
if nargin == 3
eps = 1.0e-6;
end
l = a + 0.382*(b-a);
u = a + 0.618*(b-a);
k=1;
tol = b-a;
while tol>eps && k<100000
fl = subs(f , findsym