使用精确搜索算法确定步长的最速下降法要点.doc

使用精确搜索算法确定步长的最速下降法要点.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用精确搜索算法确定步长的最速下降法要点

数学与计算科学学院 实 验 报 告 实验项目名称 使用精确搜索算法确定步长的最速下降法 所属课程名称 最优化方法 实 验 类 型 算法编程 实 验 日 期 201 班 级 学 号 姓 名 成 绩 一、实验概述: 【实验目的】 掌握精确搜索算法确定步长的最速下降法; 使用计算机语言表达最优化方法。 【实验原理】 最速下降法又称为梯度法,是1847年由著名数学家Cauchy 给出的。他是解析法中最古老的一种,其他解析方法或是它的变形,或是受它的启发而得到的,因此它是最优化方法的基础。 设无约束问题中的目标函数 f : Rn ??R1一阶连续可微。 最速下降法的基本思想是:从当前点出发,取函数 f (x)在点处下降最快的方向作为我们的搜索方向.由 f (x)的 Taylor 展式知 略去t的高阶无穷小项不计,可见取时,函数值下降得最多。于是,我们可以构造出最速下降法的迭代步骤。 解无约束问题的的最速下降法计算步骤 第 1 步 选取初始点,给定终止误差 ,令k:=0; 第 2 步 计算??f (),,若‖?f ()‖?? ,停止迭代.输出 .否则进行第三步 第 3 步 取; 第 4 步进行一维搜索,求,使得 令,k:=k+1,转第2 步。 由以上计算步骤可知,最速下降法迭代终止时,求得的是目标函数驻点的一个近似点。 【实验环境】 计算机 VC++ 二、实验内容: 【实验方案】 列举例题 手工计算 将计算步骤等实现程序化 实验结果分析 【实验过程】 例题 计算步骤: 语言设计流程图: 【实验结论X2=-0.008230452675 【实验小结结论#include “math.h” #include “stdio.h” float x[10],y[10],p[10],f,h; int n; vod fun( ) {int i; for(i=1,in;i++) x[i]=y[i]-h*p[i]; f=1/2*x[1]*x[1]+x[2]*x[2]; f=f+60; return; } main( ){float g[10],d[10],q,r,e,h1,h2,h3,h4,t,t0,c1,c2,f1,f2,f3,f4,f5,v; int i,k,u; printf(“input n,e\n”); scanf(“%d,%f”,n,e); x[1]=0;x[2]=0; p4: g[1]=2*x[1]-x[2]-10; g[2]=2*x[2]-x[1]-4; q=0; for(i=1;in;i++) q=g[i]*g[i]+q; r=sqrt(q); for(i=1;in;i++) {y[i]=x[i];p[i]=g[i]/r;} if(re)go to p3; else {t0=1;v=0.1;h1=0;h=h1 fun( );f1=f; p2: u=0;t=t0; h2=h1+t;h=h2; fun( );f2=f; if(f1f2) {t=t+t;u=u+1; else{t=-t;h3=h1;f3=f1; h1=h2;f1=f2;h2=h3;f2=f3; p1: h3=h2+t; h=h3; fun( ) f3=f; if(f2f3) {t=t+t;u=u+1;h1=h2;f1=f2;h2=h3;f2=f3;goto pl;} else{if(u0) {h4=0.5*(h2+h3);h=h4; fun( );f4=f; if(f4f2) {h3=h4;f3=f4;} else{h1=h2;f1=f2;h2=h4;f2=f4;} } c1=(f3-f1)/(h3-h1); c2=((f2-f1)/(h2-h1)-c1)/(h2-h3); if(fabs(c2)e) {h1=h2;f1=f2;t0=v*t0;goto p2;} else{h4=0.5*(h1+h3-(c1/c2));h=h4; fun( );f4=f; if(f21) f5=1; else f5=f2; if((fabs(f4-f2)/f5)e) {for(i=1;in;i++) x[i]=y[i]-h4*p[i]; goto p4; } else {if(f4f2) {h1=

文档评论(0)

1520520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档