鲍威尔算法matlab程序-f

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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];

%搜索方向

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

%方向替换

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

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;

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(f), l);

fu = subs(f , findsym(f), u);

相关文档
最新文档