习题二
-
-用0.618法求近似最优解
function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon)
%功能: 0.618法精确线搜索
%输入: phi是目标函数, a, b 是搜索区间的两个端点
% delta, epsilon分别是自变量和函数值的容许误差
%输出: s, phis分别是近似极小点和极小值, G是nx4矩阵,
% 其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk],
% E=[ds,dphi], 分别是s和phis的误差限.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=(sqrt(5)-1)/2; h=b-a; phia=feval(phi,a); phib=feval(phi,b);
p=a+(1-t)*h; q=a+t*h; phip=feval(phi,p); phiq=feval(phi,q);
k=1; G(k,:)=[a, p, q, b];
while(abs(phib-phia)>epsilon)|(h>delta)
if(phip<phiq)
b=q; phib=phiq; q=p; phiq=phip;
h=b-a; p=a+(1-t)*h; phip=feval(phi,p);
else
a=p; phia=phip; p=q; phip=phiq;
h=b-a; q=a+t*h; phiq=feval(phi,q);
end
k=k+1; G(k,:)=[a, p, q, b];
end
ds=abs(b-a); dphi=abs(phib-phia);
if(phip<=phiq)
s=p; phis=phip;
else
s=q; phis=phiq;
end
E=[ds,dphi];
在窗口输入命令
[s,phis,k,G,E]=golds(inline('s^3-2*s+1)'),0,3,0.15,0.001)
2-用抛物线法求
function [s,phis,k,ds,dphi,S]=qmin(phi,a,b,delta,epsilon)
%功能: 精确线搜索之抛物线法
%输入: phi 是目标函数, a和b是搜索区间的端点
% delta,epsilon是容许误差
%输出: s是近似极小点, phis是对应的近似极小值;
% ds, dphi分别是s, phis的误差界;