使用黄金分割法确定步长的牛顿法解析.docx
- 文档编号:4486570
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:258.15KB
使用黄金分割法确定步长的牛顿法解析.docx
《使用黄金分割法确定步长的牛顿法解析.docx》由会员分享,可在线阅读,更多相关《使用黄金分割法确定步长的牛顿法解析.docx(14页珍藏版)》请在冰豆网上搜索。
使用黄金分割法确定步长的牛顿法解析
长沙理工大学
数学与计算科学学院
实验报告
实验项目名称使用黄金分割法确定步长的牛顿法
所属课程名称最优化方法
实验类型算法编程
实验日期201
班级信
学号
姓名
成绩
一、实验概述:
【实验目的】
(1)掌握Matlab数值计算的基本方法;
(2)掌握最速下降法;
(3)掌握黄金分割法确定步长。
【实验原理】
1.黄金分割法:
一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。
一维搜索的解法很多,这里主要采用黄金分割法(0.618法)。
该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。
黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点xmin的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数,即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:
依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间。
具体步骤是:
在区间[a,b]内取点:
a1,a2把[a,b]分为三段。
①如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+0.618*(b-a);
②如果f(a1) 如果|(b-a)/b|和|(y1-y2)/y2|都大于收敛精度ε重新开始循环。 因为[a,b]为单峰区间,这样每次可将搜索区间缩小0.618倍,处理后的区间都将包含极小点的区间缩小,然后在保留下来的区间上作同样的处理,如此迭代下去,将使搜索区[a,b]逐步缩小,直到满足预先给定的精度时,即获得一维优化问题的近似最优解。 插入点原理图如下: 算法流程图: 图1 2.牛顿法: 设 是二次可微实函数, ,Hesse矩阵 正定。 在 附近用二次Taylor展开近似 , , 为 的二次近似。 将上式右边极小化,便得: ,这就是牛顿法的迭代公式。 在这个公式里,步长因子 。 令 ,则上式也可写成: 显然,牛顿法也可以看成在椭球范数 下的最速下降法。 事实上,对于 , 是极小化问题 的解。 该极小化问题依赖于所取的范数,当采取 范数时, ,所得方法为最速下降法。 当采用椭球范数 时, ,所得方法即为牛顿法。 【实验环境】 Windows7 Matlab7.0 二、实验内容: 【实验方案】 算例: 的极小值, 。 要求: 1、利用使用黄金分割法确定步长的牛顿法 编写一维搜索方法(含黄金分割法确定步长); 2、在使用共轭梯度法梯度法进行搜索时可以调用一维搜索方法。 【实验过程】 1.黄金分割法程序流程图 2.牛顿法的改进算法: 给出初始点 。 第k步迭代为: (1)令 ,其中: ,如果 正定 ;否则。 (2)计算 的Cholesky分解, 。 (3)解 得 。 (4)令 【实验结论】(结果) 【实验小结】(收获体会) 这次实验,使最优化方法这门课的一些理论知识与实践相结合,更加深刻了我对这门课的认识,巩固了我的理论知识。 我个人得到了不少的收获,一方面加深了我对课本理论的认识,另一方面也提高了个人对于实际问题的解答能力。 对于牛顿法和黄金分割法的原理与应用有个深刻认识,也将老师在课堂上的讲解真正的融会贯通,这次的实验非常有意义. 三、指导教师评语及成绩: 评语 评语等级 优 良 中 及格 不及格 1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强 2.实验方案设计合理 3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻) 4实验结论正确. 成绩: 指导教师签名: 批阅日期: 附录1: 源程序 #include #include #include //原函数 #definef(x1,x2)x1*x1+x2*x2-x1*x2-10*x1-4*x2+60 //梯度模 #definetdm(x1,x2)sqrt((2*x1-x2-10)*(2*x1-x2-10)+(2*x2-x1-4)*(2*x2-x1-4)) //x1的偏导数 #defineG1(x1,x2)2*x1-x2-10 //x2的偏导数 #defineG2(x1,x2)2*x2-x1-4 //一维搜索 //进退法求搜索区间 constfloateps=0.001; //eps为计算精度; doubleHJFC(doublex1[],doubles1[]) { intk=1,i,j; doublea0=1,b0=0.5,a1,b1,a[3],f[3],y[3][2],m,n,ak2,c; //a0为初始步长,b0为初始步长增量;a1,b1为进退法确定的最终区间; a[0]=a0; a[1]=a0+b0; for(i=0;i<2;i++) for(j=0;j<2;j++) y[i][j]=x1[j]+a[i]*s1[j]; for(i=0;i<2;i++) f[i]=f(y[i][0],y[i][1]); if(f[0]>f[1]) while(k) { b0=2*b0; a[2]=a[1]+b0; for(j=0;j<2;j++) y[2][j]=x1[j]+a[2]*s1[j]; f[2]=f(y[2][0],y[2][1]); if(f[2]>f[1]) { m=a[0]; n=a[2]; k=0; } else { k=1; a[1]=a[2]; f[1]=f[2]; } } else while(k) { b0=2*b0; a[2]=a[0]-b0; for(j=0;j<2;j++) y[2][j]=x1[j]+a[2]*s1[j]; f[2]=f(y[2][0],y[2][1]); if(f[2]>f[0]) { m=a[2]; n=a[1]; k=0; } else { k=1; a[0]=a[2]; f[0]=f[2]; } } //黄金分割法求最佳步长 a1=m; b1=n; a[0]=n-0.618*(n-m); a[1]=m+0.618*(n-m); for(i=0;i<2;i++) for(j=0;j<2;j++) y[i][j]=x1[j]+a[i]*s1[j]; for(i=0;i<2;i++) f[i]=f(y[i][0],y[i][1]); do { if(f[0] { n=a[1]; a[1]=a[0]; f[1]=f[0]; a[0]=n-0.618*(n-m); for(j=0;j<2;j++) y[0][j]=x1[j]+a[0]*s1[j]; f[0]=f(y[0][0],y[0][1]); } else { m=a[0]; a[0]=a[1]; f[0]=f[1]; a[1]=m+0.618*(n-m); for(j=0;j<2;j++) y[1][j]=x1[j]+a[1]*s1[j]; f[1]=f(y[1][0],y[1][1]); } c=(n-m)/(b1-a1); }while(fabs(c)>eps); ak2=(m+n)/2; returnak2; } //共轭梯度法 voidmain() { doublex[2],s[2],g[4],bita,arph; //x数组为函数解的转置矩阵;s数组为搜索方向的转置矩阵;g数组为梯度转置矩阵;arph为最优步长; intk=1; //k为迭代次数; //赋初值; printf("请输入初始x1、x2: \n\n"); scanf("%d%d",&x[0],&x[1]); printf("过程如下: \n\n"); g[0]=G1(x[0],x[1]); g[1]=G2(x[0],x[1]); while(tdm(x[0],x[1])>eps) //迭代终止准则; { if(k==1) { s[0]=-g[0]; s[1]=-g[1]; bita=0; } else { bita=(g[0]*g[0]+g[1]*g[1])/(g[2]*g[2]+g[3]*g[3]); s[0]=-g[0]+bita*s[0]; s[1]=-g[1]+bita*s[1]; } arph=HJFC(x,s); x[0]=x[0]+arph*s[0]; x[1]=x[1]+arph*s[1]; g[2]=g[0]; g[3]=g[1]; g[0]=G1(x[0],x[1]); g[1]=G2(x[0],x[1]); printf("第%d次迭代: \n\n",k); printf("步长steplength=%f\t",arph); printf("bb=%f\t\n",bita); printf("x[0]=%f\tx[1]=%f\n\n\n",x[0],x[1]); k++; } k--; printf("最后结果为: \n"); printf("最优解为: \nx[0]=%f\nx[1]=%f\n最小值为: min=%f\n迭代次数为: n=%d\n",x[0],x[1],f(x[0],x[1]),k); } 附录2: 实验报告填写说明 1.实验项目名称: 要求与实验教学大纲一致。 2.实验目的: 目的要明确,要抓住重点,符合实验教学大纲要求。 3.实验原理: 简要说明本实验项目所涉及的理论知识。 4.实验环境: 实验用的软、硬件环境。 5.实验方案(思路、步骤和方法等): 这是实验报告极其重要的内容。 概括整个实验过程。 对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。 对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。 对于创新性实验,还应注明其创新点、特色。 6.实验过程(实验中涉及的记录、数据、分析): 写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。 7.实验结论(结果): 根据实验过程中得到的结果,做出结论。 8.实验小结: 本次实验心得体会、思考和建议。 9.指导教师评语及成绩: 指导教师依据学生的实际报告内容,给出本次实验报告的评价。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 黄金分割 确定 步长 牛顿 解析