资源描述:
《wolfe算法确定步长的最速下降法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数学与计算科学学院实验报告实验项目名称wolfe算法确定步长的最速下降法所属课程名称最优化方法实验类型算法编程实验日期2015.11.6班级学号姓名成绩一、实验概述:【实验目的】1、使用非精确线性搜索wolfe算法确定步长。2、再使用最速下降法解决无约束最优化问题。【实验原理】1、最速下降法的基本思想是:从当前点出发,取函数在点出下降最快的方向作为我们的搜索方向。由的Taylor展开式知道略去t的高阶无穷小项不计,可见取时,函数值下降的最多。2、Wolfe线性搜索准则为:给定常数,取使得3、解无
2、约束问题的最速下降法计算步骤:Step1:选取初始点,给定终止误差Step2:计算Step3:Step4:利用wolfe线性搜索求得步长,,令【实验环境】Windows7VisualC++6.0二、实验内容:【实验方案】1、本次试验的题目为:用wolfe线性搜索下的最速下降法求解:2、根据最速下降法的求解步骤,在求解步长时,用wolfe线性搜索确定,运用C语言编写程序,在计算机上实现。【实验过程】(实验步骤、记录、数据、分析)(一)由题目可得,。选取初值点则,因为
3、
4、d
5、
6、>0.1,所以根据wo
7、lfe搜索法,,则检验其是否满足,其中,若满足,则,,检验2、若不满足(1),(2),,令中使(1)成立的最大者,令。若满足(2)则停止,并取得步长,3、否则,令,使(1)成立的最大者,令i=i+1,继续2.4、根据算法编写程序,编译运行,得出结果。【实验结论】(结果)【实验小结】(收获体会)本次试验,加深了最速下降法的掌握。在求解步长时,除了可以运用wolfe线性搜索求解,还可以运用精确线性搜索、Aimijo搜索、wolf搜索等方法。本次试验在运用wolfe搜索求解步长时,编程遇到了不少困难。
8、在今后的学习中,要加强对算法的理解和算法实现。三、指导教师评语及成绩:评语评语等级优良中及格不及格1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强2.实验方案设计合理3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)4实验结论正确.成绩:指导教师签名:批阅日期:附录1:源程序#include#include#definee0.1#definep0.2#defineq0.5#definer1#defines0.5#definet0.5floatf(f
9、loatx[]){floata;a=2*x[0]*x[0]+x[1]*x[1];returna;}floatg1(floatx[]){floatg;g=4*x[0];returng;}floatg2(floatx[]){floatg;g=2*x[1];returng;}intOk1(floatx1[],floatx0[],floata){floatb,c;b=f(x1);c=f(x0)-p*a*(g1(x0)*g1(x0)+g2(x0)*g2(x0));if(b<=c)return1;elser
10、eturn0;}intOk2(floatx1[],floatx0[],floata){floatb,c;b=-(g1(x1)*g1(x0)+g2(x1)*g2(x0));c=-q*g1(x0)*g1(x0)+g2(x0)*g2(x0);if(b>=c)return1;elsereturn0;}floatqiubuchang(floatx0[],floatd[]){inta0=1,a1=r,a,r1,r2;floatx1[2];x1[0]=x0[0]+a*d[0];x1[1]=x0[1]+a*d[
11、1];if((Ok1(x1,x0,a))&&(Ok2(x1,x0,a)))a=a0;else{do{a1*=s;x1[0]=x0[0]+a1*d[0];x1[1]=x0[1]+a1*d[1];}while(Ok1(x1,x0,a1));a0=a1;while(!Ok2(x1,x0,a0)){r1=a0/r;do{r2=r1-a0;a1=a0+r2;x1[0]=x0[0]+a1*d[0];x1[1]=x0[1]+a1*d[1];r2*=t;}while(Ok1(x1,x0,a1));a0=a1;}
12、a=a0;}returna;}voidmain(){inti=1;floata;floatx0[2],x1[2],g[2],d[2];printf("输入初始值:");scanf("%f,%f",&x0[0],&x0[1]);printf("%f,%f",x0[0],x0[1]);while(sqrt((double)((g1(x0))*(g1(x0))+(g2(x0))*(g2(x0))))>=e){printf("第%d次迭代:",i++);a=qiubuchang(x0,d);prin