当前位置:文档之家› 最速下降法求解这一无约束的最优化问题

最速下降法求解这一无约束的最优化问题

第五题:
解:选择类型为:
2/13()x t
y t x e
x =+
其中123,,x x x 是待求参数。

根据最小二乘原理,参数123,,x x x 是下面优化问题的解。

[]2
8
1231
m in (,,)()i i i f x x x y t y ==

用最速下降法求解这一无约束的最优化问题。

zuiyouhua.m
function sh=zuiyouhua(x0) % x0为初始猜测值 syms x y z a al;
%====================================== t=[0.2,1,2,3,5,7,11,16];
r1=[5.05,8.88,11.63,12.93,14.15,14.73,15.30,15.60]; minf=0; for i=1:8
r(i)=x*exp(y/t(i))+z-r1(i); %构造最小二乘最优化的目标函数 minf=r(i)^2+minf;
end
%====================================== f1=diff(minf,x); f2=diff(minf,y);
f3=diff(minf,z); %求目标函数的梯度 F=[f1,f2,f3];
%====================================== Fx1= -subs(F,{x,y,z},x0); Fx=Fx1/norm(Fx1); k=0;
%====================================== %最速下降法核心迭代程序 while 1 x1=x0+a*Fx;
P=subs(minf,{x,y,z},x1);
xx1=xianxing(P); %调用线性搜索函数 al=huangjing(P,xx1); %调用黄金分割法函数; x0=x0+al*Fx;
Fx1= -subs(F,{x,y,z},x0); Fx=Fx1/norm(Fx1); if norm(Fx1)<5e-4 sh=x0;
return; end end
%====================================== function xx=xianxing(Pa) %一维搜索法线性搜索函数 aa=findsym(Pa); a1=1; h=0.5; k=0; t1=2; while 1 a2=a1+h;
Pa1=subs(Pa,aa,a1); Pa2=subs(Pa,aa,a2); if Pa2< Pa1 h=t1*h; a0=a1; a1=a2; k=k+1;
if k>1000
disp('迭代步数太多,可能不收敛!'); end else if k==0 h=-h; a0=a2; else
c1=min(a0,a2); d1=max(a0,a2); xx=[c1,d1]; return; end end
end
%====================================== function al1=huangjing(Pb,xx2)
%黄金分割法函数 ab=findsym(Pb); c=xx2(1); d=xx2(2);
lamda=0.618;
eps1=1e-3; u=d-lamda*(d-c); v=c+lamda*(d-c); N=1000; pu=subs(Pb,ab,u); pv=subs(Pb,ab,v); for K=1:N
if abs(v-u)<eps1 g=(u+v)/2; al1=g; return; end
if pu <= pv c=c; d=v; v=u; pv=pu;
u=d-lamda*(d-c); pu=subs(Pb,ab,u); else c=u; d=d; u=v; pu=pv;
v=c+lamda*(d-c); pv=subs(Pb,ab,v); end if K==N
disp('迭代次数过多,不收敛!'); end end
%==================================== >> x0=[0,0,0]; >> zuiyouhua(x0) ans =
11.3459 -1.0730 4.9972
所以:
12311.3459, 1.0730, 4.9972x x x ==-=
%=====================================================================================
画图程序:
x=[11.3459,-1.0730,4.9972];
tdata=[0.2,1,2,3,5,7,11,16];
ydata=[5.05,8.88,11.63,12.93,14.15,14.73,15.30,15.60];
f=x(1)*exp(x(2)./tdata)+x(3); plot(tdata,ydata,'o',tdata,f,'r-')
计算所得得图为:。

相关主题