文档介绍:运筹学课程实验报告姓名:********学号:********班级:********日期:2012/12/17一、实验目的:1、掌握求解无约束最优化问题的F-R共轭梯度法,以及约束最优化问题Wolfe简约梯度法。2、学会用MATLAB编程求解问题,并对以上方法的计算过程和结果进行分析。二、实验原理与步骤: 1、F-R共轭梯度法 基本步骤是在点处选取搜索方向,使其与前一次的搜索方向关于共轭,即然后从点出发,沿方向求得的极小值点,即如此下去,得到序列{}。不难求得的解为注意到的选取不唯一,我们可取由共轭的定义可得:共轭梯度法的计算过程如下:第一步:取初始向量,计算第步:计算 2、Wolfe简约梯度法 Wolfe基本计算步骤:第一步:取初始可行点,给定终止误差,令k:=0;第二步:设是的m个最大分量的下标集,对矩阵A进行相应分解第三步:计算,然后计算简约梯度;第四步:^_D_Dd。否则进行第五步。第五步:进行有效一维搜索,求解,,k:=k+1,转入第二步。三、实验内容: 1、(运筹学P153页第20题)用F-R法求解选取初始点,.2、(运筹学P154页第25题)用Wolfe法求解以下问题:选取初始可行点,.四、问题求解:问题1求解:(F-R法)程序代码如下:(1)主函数symsx1x2r;f=(1-x1)^2+2*(x2-x1^2)^2;x=[x1,x2];df=jacobian(f,x);df=df.';error=;x0=[0,0]';g1=subs(df,x,x0);k=0;while(norm(g1)>error)ifk==0d=-g1;elsebta=g1'*g1/(g0'*g0);d=-g1+bta*d0;endy=subs(f,x,x0+r*d);result=jintuifa(y,r);result2=golden(y,r,result);step=result2;x0=x0+step*d;g0=g1;g1=subs(df,x,x0);d0=d;k=k+1;end;kx0(2)子函数进退法确定一维搜索区间:functionresult=jintuifa(y,r)t0=0;step=;t1=t0+step;ft0=subs(y,{r},{t0});ft1=subs(y,{r},{t1});if(ft1<=ft0)step=2*step;t2=t1+step;ft2=subs(y,{r},{t2});while(ft1>ft2)t1=t2;step=2*step;t2=t1+step;ft1=subs(y,{r},{t1});ft2=subs(y,{r},{t2});endelsestep=step/2;t2=t1;t1=t2-step;ft1=subs(y,{r},{t1});while(ft1>ft0)step=step/2;t2=t1;t1=t2-step;ft1=subs(y,{r},{t1});endendresult=[t2];黄金分割法进行一维搜索:functionresult=golden(y,r,m)a=0;b=m;e=1e-5;a1=a+*(b-a);f1=subs(y,{r},{a1});a2=a+*(b-a);f2=subs(y,{r},{a2});whileabs(b-a)>=eiff1<f2b=a2;a2=a1;f2=f1;a1=a+*(b-a);f1=subs(y,{r},{a1});elsea=a1;a1=a2;f1=f2;a2=a+*(b-a);f2=subs(y,{r},{a2});endend;answer=*(a+b);result=[answer];运行结果如下:由上图知极值点为,极小值=(对应的理论极小值)。问题2求解:(Wolfe法)程序代码如下:error=10^-6;x0=[0,0];symsx1x2f=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2;AB=[1,1,1,0;1,5,0,1];B=[1,0;0,1];N=[1,1;1,5];[a,b]=size(x0);initial_gradient=gradient_my(f,x0,b);norm=0;norm0=0;symst;A=[];rN=[initial_gradient(1),initial_gradient(2)]pN=-rN;pB=-[pN(1)+pN(2),-pN(1)-5*pN(2)];search_direction=[pNpB]fori=1:4norm0=norm0+(search_direction(i))^2end tmax=5/34;x00=[0,0,2,-5];x=x