机械优化设实验指导书.doc

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

实验一 一维搜索方法 本实验求函数 f(x)=(x-3)2 以及f(x)=-(x-3)2的搜索区间[a, b]。并用黄金分割法和插值法分别求最优解。 进退法: #include math.h #include stdio.h /* 函数 f(x)=(x-3)2 */ double f(double x) { return (x-3)*(x-3); } /* 求搜索区间[a,b]的函数, x0---初始点; h0---初始步长 */ void find_ab(double x0,double h0,double *a,double *b) { double h,x1,y1,x2,y2,x3,y3; h=h0; x1=x0; y1=f(x1); x2=x1+h; y2=f(x2); if (y2=y1) { ***** ****** } for (;;) { h*=2.0; x3=x2+h; y3=f(x3); if (y2y3) break; ********** } if (h0) {******} else {******} } /* 黄金分割法 a,b---搜索区间[a,b]; e---精度 x,y---最优解X*,F* */ void search_gold(double a,double b,double e, double *x,double *y) { double x1,x2,y1,y2; x1=******; y1=f(x1); x2=******; y2=f(x2); do { if (y1y2) { ****** } else { ****** } } while (b-ae); ***** } /* 二次插值法 a,b---搜索区间[a,b]; e---精度 xpt,ypt---最优解X*,F* */ void search_insert(double a, double b, double e, double *xpt, double *fpt) { double x1,x2,f1,f2,x3,f3,xp,fp,xp0,c1,c2; int k=1; x1=a; x3=b; x2=0.5*(a+b); f1=f(x1); f2=f(x2); f3=f(x3); xp0=0; for (;;) { c1=(f3-f1)/(x3-x1); c2=((f2-f1)/(x2-x1)-c1)/(x2-x3); if (c2==0.0) {******, break;} xp=0.5*(x1+x3-c1/c2); fp=f(xp); if ((xp-x1)*(x3-xp)=0.0) { ******* break; } if (k!=1) if (fabs(xp0-xp)=e) { ********* break; } if (xpx2) if (f2fp) { ****** } else { ******** } else if (f2fp) { x1=xp; f1=fp; } else { ********* } xp0=xp; k++; } } 实验二 无约束优化方法---鲍威尔方法 本实验用鲍威尔方法求函数 f(x)=(x1-5)2+(x2-6)2 的最优解。 #include math.h #include stdio.h #include stdlib.h const MAXN = 10; double xkk[MAXN],xk[MAXN],sk[MAXN]; int N; double F(double *x) { return 4*pow(x[0]-5,2.0)+pow(x[1]-6,2.0); } double f(double x) { for (int i=0; iN; i++) xkk[i]=xk[i]+x*sk[i]; return F(xkk); } /* 无约束坐标轮换法 x0--初始点 e1--一维搜索精度 e2--求解精度 */ double nc_trans(double *x0,double e1,double e2) { int i,j,k=1; doub

文档评论(0)

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

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

1亿VIP精品文档

相关文档