1、其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间。具体步骤是:在区间a,b内取点:a1 ,a2 把a,b分为三段。 如果f(a1)f(a2),令a=a1,a1=a2,a2=a+0.618*(b-a); 如果f(a1)=eps%循环条件,eps为收敛精度 if y1=y2%比较插入点的函数值的大小 a=a1;%缩短搜索区间 a1=a2; y1=y2; a2=a+0.618*(b-a); y2=f(a2); else b=a2; a2=a1; y2=y1; a1=b-0.618*(b-a); y1=f(a1); endk=k+1; end%停止迭代x=(a+b)/2
2、;%取最后两点的平均值作为极小点的数值近似解fval=f(x);fprintf(k=n);%显示迭代次数disp(k);1.4 黄金分割法应用举例根据0.618算法编写程序,求函数在区间上的极大值。解:程序为: z=(t) t2-10*t+36;x,fval=golden1(z,0,10,10-6)运行结果:说明最小值点为,最小值为,迭代次数为342.1 共轭梯度法的基本原理与步骤共轭梯度法(Conjugate Gradient)是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅
3、是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。共轭梯度法是共轭方向法中的一种,因为在该方法中每一个共轭向量都是依赖于迭代点处的负梯度而构造出来的,所以称作共轭梯度法。其基本步骤为:1) 设初始点,第一个搜索方向取点的负梯度,即沿进行一维搜索,得 ,并算出点处的梯度 。是以为切线和某等值曲线的切点。根据梯度和该点等值面的切面相垂直的性质,因此和正交,有,从而和正交,即,和组成平面正交系。2)在和所构成的平面正交系中求的共轭方向,作为下一步的搜索方向
4、。把取成与两个方向的线性组合,即式中待定系数,它可以根据共轭方向与梯度的关系求得。3)再沿方向进行一维搜索。4)以上面的方式一直搜索下去,直到最后迭代点处梯度的模小于给定允许值为止。若目标函数为非二次函数,经n次搜索还未达到最优点时,则以最后得到的点作为初始值,重新计算共轭方向,一直到满足精度要求为止。主程序:function x,output=cg(fun,dfun,x0)epsi=1.0e-3;funcN=0;rho=0.01;l=0.15;u=0.85;x=x0;f=feval(fun,x);funcN=funcN+1;n=length(x0);g=feval(dfun,x);while
5、 norm(g)epsi&k=0.0gd=g alpha_0=1; alpha,funcNk,exitflag=lines(fun,rho,l,u,alpha_0,f,gd,x,d); funcN=funcN+funcNk; if exitflag=-1 break s=alpha*d;x=x+s; f=feval(fun,x); funcN=funcN+1; gold=g;dold=d; g=feval(dfun,x);endoutput.fval=f;output.iteration=k;output.funcount=funcN;output.gnorm=norm(g);编译程序:fun
6、ctionalpha,funcN,exitflag=lines(funct,rho,l,u,alpha_0,f,gd,x,d,varargin);alpha=alpha_0;i=0;imax=30;while i=imax fn=feval(funct,x+alpha*d,varargin:); i=i+1; if fn=imax&fn=f exitflag=-1;2.4 共轭梯度法应用举例方程程序:function f=fangcheng(x)f=4*(x(1)-5)2+(x(2)-6)2导数方程矩阵:function g=dfangcheng(x)g=2*(x(1)-5); 2*(x(2)-6);结果:说明最优解为x=5;6,f(x)=0。与书上结果一致。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1