最优化方法Word下载.docx
《最优化方法Word下载.docx》由会员分享,可在线阅读,更多相关《最优化方法Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
的搜索区间,要求选取
.
2.用黄金分割法编程计算
,
已知初始单谷区间
,要求缩短后的区间长度不超过0.3.
3.用Newton法编程计算
已知初始点t0=0,要求精度
4.用坐标轮换法编程计算
取初始点
允许误差
5.用旋转方向法编程计算
,初始搜索方向
初始步长
收缩因子
,放大因子
6.用Powell法编程计算
实验步骤:
一.进退法:
1.初始化:
程序清单:
一.进退法:
function[minx,maxx]=minJT(f,x0,h0,eps)
formatlong;
ifnargin==3
eps=1.0e-6;
end
x1=x0;
k=0;
h=h0;
while1
x4=x1+h;
k=k+1;
f4=subs(f,findsym(f),x4);
f1=subs(f,findsym(f),x1);
iff4<
f1
x2=x1;
x1=x4;
f2=f1;
f1=f4;
h=2*h;
else
ifk==1
h=-h;
x2=x4;
f2=f4;
x3=x2;
break;
end
minx=min(x1,x3);
maxx=x1+x3-minx;
formatshort;
二.黄金分割法:
function[x,minf]=minHJ(f,a,b,eps)
l=a+0.382*(b-a);
u=a+0.618*(b-a);
k=1;
tol=b-a;
whiletol>
eps&
&
k<
100000
fl=subs(f,findsym(f),l);
fu=subs(f,findsym(f),u);
iffl>
fu
a=l;
l=u;
u=a+0.618*(b-a);
b=u;
u=l;
l=a+0.382*(b-a);
tol=abs(b-a);
ifk==100000
disp('
找不到最小值!
'
);
x=NaN;
minf=NaN;
return;
x=(a+b)/2;
minf=subs(f,findsym(f),x);
三.Newton法:
function[x,minf]=minNewton(f,x0,eps)
ifnargin==2
df=diff(f);
d2f=diff(df);
tol=1;
eps
dfx=subs(df,findsym(df),x0);
ifdiff(d2f)==0
d2fx=double(d2f);
d2fx=subs(d2f,findsym(d2f),x0);
x1=x0-dfx/d2fx;
k=k+1;
tol=abs(dfx);
x0=x1;
x=x1;
minf=subs(f,findsym(f),x);
四.坐标轮换法:
function[x,minf]=minconPS(f,g,x0,delta,u,var,eps1,eps2)
ifnargin==7
eps2=1.0e-6;
n=length(var);
y=x0;
bmainCon=1;
whilebmainCon
yf=Funval(f,var,y);
yk_1=y;
fori=1:
n
tmpy=zeros(size(y));
tmpy(i)=delta(i);
tmpf=Funval(f,var,y+tmpy);
forj=1:
length(g)
cong(j)=Funval(g(j),var,y+tmpy);
iftmpf<
yf&
min(cong)>
=0
bcon=1;
whilebcon
tmpy(i)=2*tmpy(i);
tmpf_i=Funval(f,var,y+tmpy);
cong_i(j)=Funval(g(j),var,y+tmpy);
iftmpf_i<
yf&
min(cong_i)>
=0
y_res=y+tmpy;
bcon=0;
tmpf=Funval(f,var,y-tmpy);
cong(j)=Funval(g(j),var,y-tmpy);
tmpf_i=Funval(f,var,y-tmpy);
cong_i(j)=Funval(g(j),var,y-tmpy);
y_res=y-tmpy;
y_res=y;
delta=delta/u;
end
y=y_res;
ifnorm(y-yk_1)<
=eps2
ifmax(abs(delta))<
=eps1
x=y;
bmainCon=0;
delta=delta/u;
minf=Funval(f,var,x);
五.旋转方向法:
function[x,minf]=minRb(f,x0,D,delta,alpha,beta,var,eps)
x0=transpose(x0);
y0=Funval(f,var,x0);
delta0=delta;
[Q,R]=qr(D);
yf=Funval(f,var,y);
bconti=1;
whilebconti
tmpy=delta(i)*Q(:
i);
bconti=0;
=yf
y=y+tmpy;
delta(i)=alpha*delta(i);
delta(i)=-beta*delta(i);
yfn=Funval(f,var,y);
ifyfn<
yf
continue;
ifyfn==yf
Funval(f,var,x0)
x1=y;
tol=norm(x1-x0);
iftol<
x=x1;
D=Q;
D(:
1)=x1-x0;
[Q,R]=qr(D);
delta=delta0;
y=x0;
eps
x=x0;
六.Powell法:
function[x,minf]=minPowell(f,x0,P,var,eps)
ifnargin==4
n=length(var)+1;
symsl;
y=zeros(size(P));
y(:
1)=x0;
n-1
yv=y(:
i)+l*P(:
fy=Funval(f,var,yv);
[a,b]=minJT(fy,0,0.1);
tl=minHJ(fy,a,b);
i+1)=y(:
i)+tl*P(:
P(:
n)=y(:
n)-y(:
1);
ifnorm(P(:
n))<
=eps
x=y(:
n);
FY(j)=Funval(f,var,y(:
j));
maxDF=-inf;
m=0;
df=FY(j)-FY(j+1);
ifdf>
maxDF
maxDF=df;
m=j+1;
tmpF=Funval(f,var,2*y(:
n)-y(:
1));
fl=FY
(1)-2*FY(n)+tmpF;
iffl<
2*maxDF
n)+l*P(:
x0=y(:
n)+tl*P(:
m:
(n-1))=P(:
(m+1):
n);
实验结果与分析(可用文字描述和贴图等方式表现实验结果):
在工作区间输入:
function[minx,maxx]=minJT(x^3-2*x+1,0,1,0)
function[x,minf]=minHJ(x*(x+2),-3,5,0.3)
function[x,minf]=minNewton(x^3-2*x+1,0,0.01)
指导教师意见:
签名:
年月日