无约束优化方法与MATLAB实现Word文档格式.docx
《无约束优化方法与MATLAB实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《无约束优化方法与MATLAB实现Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![无约束优化方法与MATLAB实现Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/24/ee1a1fe1-c0d0-4ce0-bfbb-c8a86b7c397e/ee1a1fe1-c0d0-4ce0-bfbb-c8a86b7c397e1.gif)
yf
bcon=1;
whilebcon
tmpy(i)=2*tmpy(i);
tmpf_i=subs(f,var,y+tmpy);
iftmpf_i<
yf
y_res=y+tmpy;
else
bcon=0;
end
tmpf=subs(f,var,y-tmpy);
tmpf_i=subs(f,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=subs(f,var,x);
M函数文件的运行结果如下:
x=-1.7499
-3.2499
minf=-8.3750
=======================================================
例4-2MATLAB实现,用M函数文件形式求解:
symsts;
f=t^2+s^2-t*s-10*t-4*s+60;
[x,mf]=minFD(f,[00],[ts])
梯度法函数文件minFD如下:
function[x,minf]=minFD(f,x0,var,eps)
%目标函数:
%初始点:
%自变量向量:
%精度:
eps;
%目标函数取最小值时的自变量值:
x;
%目标函数的最小值:
minf
formatlong;
ifnargin==3
eps=1.0e-6;
symsl;
tol=1;
gradf=-jacobian(f,var);
whiletol>
eps
v=subs(gradf,var,x0);
tol=norm(v);
y=x0+l*v;
[a,b]=minJT(yf,0,0.1);
xm=minHJ(yf,a,b);
%用黄金分割法进行一维搜索
x1=x0+xm*v;
x0=x1;
x=x1;
minf=subs(subs(f,x
(1)),x
(2));
formatshort;
x=8.00006.0000
mf=8.0000
=======================================================================
例4-3MATLAB实现,用M函数文件形式求解:
symsts;
f=t^2-4*s^2;
[x,mf]=minNT(f,[11],[ts])
牛顿法函数文件minNT如下
function[x,minf]=minNT(f,x0,var,eps)
%自变量向量var;
%精度:
%目标函数取最小时的自变量值:
%目标函数最小值:
minf;
x0=transpose(x0);
gradf=jacobian(f,var);
%梯度方向
jacf=jacobian(gradf,var);
%雅克比矩阵
pv=subs(jacf,var,x0);
p=-inv(pv)*transpose(v);
%搜索方向
p=double(p);
x1=x0+p;
minf=subs(f,var,x);
x=0
0
mf=0
============================================================================
例4-4MATLAB实现,用M函数文件形式求解:
symstsz;
f=(t-s+z)^2+(-t+s+z)^2+(t+s+z)^2
[x,mf]=minMNT(f,[0.510.5],[tsz])
阻尼牛顿法函数文件minNT如下
function[x,minf]=minMNT(f,x0,var,eps)
y=x0+l*p;
%进退法求单峰区间
%黄金分割法进行一维搜素
x1=x0+xm*p;
x=1.0e-015*
-0.3468
-0.6936
mf=2.4053e-030
===================================================================
例4-5MATLAB实现,用M函数文件形式求解:
f=t^2+4*s^2;
[x,mf]=minGETD(f,[11],[ts])
共轭梯度法函数文件minGETD如下
x0=transpose(x0);
v0=subs(gradf,var,x0);
p=-transpose(v0);
k=0;
while1
iftol<
=eps
x=x0;
break;
%进退法确定单峰区间
xm=minPWX(yf,a,b);
%二次插值一维搜素
vk=subs(gradf,var,x1);
tol=norm(vk);
x=x1;
ifk+1==n
continue;
lamda=dot(vk,vk)/dot(v,v);
p=-transpose(vk)+lamda*p;
k=k+1;
0.3331
0.0971
mf=1.4868e-031
例4-6MATLAB实现,用M函数文件形式求解:
f=4*(t-5)^2+(s-6)^2;
X=[81011;
91111];
[x,mf]=minSimpSearch(f,X,1.2,0.5,2.0,0.3,[ts])
单纯形法函数文件minGETD如下
function[x,minf]=minSimpSearch(f,X,alpha,sita,gama,beta,var,eps)
%:
%反射系数:
alpha;
%紧缩系数:
sita;
%扩展系数:
gama;
%收缩系数:
beta;
%目标函数最小值:
N=size(X);
n=N
(2);
FX=zeros(1,n);
FX(i)=subs(f,var,X(:
i));
[XS,IX]=sort(FX);
%将单纯形的顶点按目标函数值的大小重新编号
Xsorted=X(:
IX);
%排序后的编号
px=sum(Xsorted(:
1:
(n-1)),2)/(n-1);
%单纯形的中心
Fpx=subs(f,var,px);
SumF=0;
SumF=SumF+(FX(IX(i))-Fpx)^2;
SumF=sqrt(SumF/n);
ifSumF<
=eps
x=Xsorted(:
1);
x2=px+alpha*(px-Xsorted(:
n));
%将中心点向单纯形外反射
fx2=subs(f,var,x2);
iffx2<
XS
(1)
x3=px+gama*(x2-px);
%中心点的扩展
fx3=subs(f,var,x3);
iffx3<
Xsorted(:
n)=x3;
X=Xsorted;
n)=x2;
XS(n-1)
XS(n)
x4=px+beta*(Xsorted(:
n)-px);
%中心点压缩
fx4=subs(f,var,x4);
FNnew=subs(f,var,Xsorted(:
iffx4<
FNnew
n)=x4;
x0=Xsorted(:
j)=x0+sita*(Xsorted(:
j)-x0);
x=5.0002
5.9999
mf=1.8370e-007
=================================================================
例4-7MATLAB实现,用M函数文件形式求解:
f=t^2+2*s^2-4*t-2*t*s;
p=[-10;
01];
[x,mf]=minPowell(f,[11],p,[ts])
Powell法函数文件minPowell如下
function[x,minf]=minPowell(f,x0,P,var,eps)
f;
%初始搜索点:
x0;
%线性无关的初始向量组:
p;
var;
eps;
%目标函数取最小值时的自变量:
x;
%目标函数的最小值:
minf:
ifnargin==4
n=length(var)+1;
y=zeros(size(P));
y(:
1)=x0;
n-1%在每个搜索方向上进行一维搜索
yv=y(:
i)+l*P(:
i);
fy=subs(f,var,yv);
[a,b]=minJT(fy,0,0.1);
tl=minPWX(fy,a,b);
i+1)=y(:
i)+tl*P(:
P(:
n)=y(:
n)-y(:
ifnorm(P(:
n))<
=eps%精度判断
x=y(:
n);
forj=1:
FY(j)=subs(f,var,y(:
j));
maxDF=-inf;
m=0;
n-1%求出算法中对应的m
df=FY(j)-FY(j+1);
ifdf>
maxDF
maxDF=df;
m=j+1;
end
tmpF=subs(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);
%重新设置搜索方向
x=4.0000
2.0000
mf=-8.0000
======================================================================
例4-8MATLAB实现,用M函数文件形式求解:
symsx1x2
f=x1^2+4*x2^2;
[x,mf]=minDFP(f,[11],[x1x2])
DFP法函数文件minDFP如下
function[x,minf]=minDFP(f,x0,var,eps)
f:
minf;
H=eye(n,n);
p=-H*transpose(v0);
%用抛物线法进行一维搜索
ifk+1==n%重新迭代
dx=x1-x0;
dgf=vk-v;
dgf=transpose(dgf);
dxT=transpose(dx);
dgfT=transpose(dgf);
mdx=dx*dxT;
mdgf=dgf*dgfT;
fz=H*(dgf*(dgfT*H));
H=H+mdx/(dxT*dgf)-inv(dgfT*(H*dgf))*fz;
%校正公式
p=-H*transpose(vk);
mf=2.4652e-032
==============================
例4-10用fminsearch函数求解函数
的极值。
解:
在MATLAB命令窗口输入命令
>
fx=@(x)-1/((x
(1)-2)^2+3)-1/((x
(2)+1)^2-5);
[x,f]=fminsearch(fx,[0,0])
所得结果为:
x=2.0000-1.0000
f=-0.1333