现代的设计黄金分割法复合型法程序标注.docxVIP

现代的设计黄金分割法复合型法程序标注.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
黄金分割法: 公式一 #include stdio.h #include math.h #include conio.h #define e 0.00001 //收敛精度 #define tt 0.01 //一维搜索步长 float function(float x) { float y; y=pow(x,2)-10*x+36;//目标函数 return(y); } /******返回目标函数值*************/ void finding(float a[3],float f[3]) {float h=tt,a1,f1,ia;int i; a[0]=0;//从零开始搜索 f[0]=function(a[0]); for(i=0;;i++) {a[1]=a[0]+h; f[1]=function(a[1]); if(f[1]f[0]) break;//确定单峰区间右端点 if(fabs(f[1]-f[0])=e)//判断两端点之间精度 {h=-h;a[0]=a[1];f[0]=f[1];}//大于预定精度时,修改步长,反向搜索 else{ if(ia==1) return; h=h/2;ia=1;} }//满足精度时,缩短步长 //如果步长缩短后,还不满足,将返回。造成a[2]的值不确定 for(i=0;;i++) {a[2]=a[1]+h; f[2]=function(a[2]); if(f[2]f[1]) break; h=2*h;//加大步长 a[0]=a[1];f[0]=f[1]; a[1]=a[2];f[1]=f[2]; }//确定另一端点 if(a[0]a[2]) {a1=a[0];f1=f[0]; a[0]=a[2];f[0]=f[2]; a[2]=a1;f[2]=f1; }//将单峰区间右端点值存入a[2]中,左端点存入a[0]中 return; } /*********进退法确定单峰区间********/ float gold(float *ff) { float a1[3],f1[3],a[4],f[4]; float aa; int i; finding(a1,f1); a[0]=a1[0];f[0]=f1[0]; a[3]=a1[2];f[3]=f1[2]; a[1]=a[0]+0.382*(a[3]-a[0]);//取点x1 a[2]=a[0]+0.618*(a[3]-a[0]);//取点x2 f[1]=function(a[1]);//求F(x1) f[2]=function(a[2]);//求F(x2) for(i=0;;i++) { if(f[1]=f[2]) { a[0]=a[1];f[0]=f[1]; a[1]=a[2];f[1]=f[2]; a[2]=a[0]+0.618*(a[3]-a[0]); f[2]=function(a[2]); }//F(x1)F(x2),将x2赋值给x1.另求x2 else { a[3]=a[2];f[3]=f[2]; a[2]=a[1];f[2]=f[1]; a[1]=a[0]+0.382*(a[3]-a[0]); f[1]=function(a[1]); } if((a[3]-a[0])e) { aa=(a[1]+a[2])/2; *ff=function(aa); break; }//判断两点间的精度。符合,返回单峰区间中间值 } return(aa); } /*********黄金分割算法求最小值**********/ void main() { float xx,ff; xx=gold(ff); printf(优化结果是:\n); printf(\n\tx*=%f\n\tf*=%f,xx,ff); getch();//等待输入 } 公式二 float function(float x) { float y; y=pow(x,4)-5*pow(x,3)+4*pow(x,2)-6*x+60;//目标函数 return(y); } /******返回目标函数值*************/ 公式三 float function(float x) { float y; y=pow(x-2,2)*(x+1);/

文档评论(0)

189****6140 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档