《无约束优化搜索方法》实训上级操作报告.docVIP

  • 6
  • 0
  • 约4.34千字
  • 约 8页
  • 2019-03-07 发布于河北
  • 举报

《无约束优化搜索方法》实训上级操作报告.doc

《无约束优化搜索方法》实训上级操作报告

无约束优化搜索方法》上机实践报告 1、写出所选择的无约束优化搜索算法的基本过程、原理(可附流程图说明)。 鲍威尔(Powell)法是直接利用函数值来构造共轭方向的一种方法 在鲍威尔基本算法中,每一轮迭代都用连结始点和终点所产生出的搜索方向去替换原向量组中的第一个向量,而不管它的“好坏”,这是产生向量组线性相关的原因所在。 在改进的算法中首先判断原向量组是否需要替换。如果需要替换,还要进一步判断原向量组中哪个向量最坏,然后再用新产生的向量替换这个最坏的向量,以保证逐次生成共轭方向。 2、程序计算结果分析:中间各步骤的结果分析及与理论计算结果分析对比。 算例:ff=x[0]*x[0]+2*x[1]*x[1]-4*x[0]-2*x[0]*x[1]; (1)鲍威尔改进算法C++程序清单: #include stdio.h #include stdlib.h #include math.h double objf(double x[]) {double ff; ff=x[0]*x[0]+2*x[1]*x[1]-4*x[0]-2*x[0]*x[1]; return(ff); } void jtf(double x0[ ],double h0,double s[ ],int n,double a[ ],double b[ ]) {int i; double *x[3],h,f1,f2,f3; for (i=0;i3;i++) x[i]=(double *)malloc (n*sizeof(double)); h=h0; for(i=0;in;i++) *(x[0]+i)=x0[i]; f1=objf(x[0]); for(i=0;in;i++) *(x[1]+i)=*(x[0]+i)+h*s[i]; f2=objf(x[1]); if(f2=f1) {h= -h0; for (i=0;in;i++) *(x[2]+i)=*(x[0]+i); f3=f1; for(i=0;in;i++) {*(x[0]+i)= *(x[1]+i); *(x[1]+i)= *(x[2]+i); } f1=f2; f2=f3; } for(;;) {h=2. *h; for(i=0;in;i++) *(x[2]+i)=* (x[1]+i) +h*s[i]; f3= objf(x[2]); if(f2f3) break; else { for(i=0;in;i++) {*(x[0]+i)= *(x[1]+i); *(x[1]+i)= *(x[2]+i); } f1=f2; f2=f3; } } if(h0. ) for(i=0;in;i++) {a[i]=*(x[2]+i); b[i]=*(x[0]+i); } else for(i=0;in;i++) {a[i]=*(x[0]+i); b[i]=*(x[2]+i); } for(i=0;i3;i++) free(x[i]); } double gold(double a[],double b[],double eps,int n,double xx[]) { int i; double f1,f2,*x[2],ff,q,w; for(i=0;i2;i++) x[i]=(double*)malloc (n*sizeof(double)); for(i=0;in;i++) {*(x[0]+i)=a[i]+0.618*(b[i]-a[i]); *(x[1]+i)=a[i]+0.382*(b[i]-a[i]); } f1=objf(x[0]); f2=objf(x[1]); do {if(f1f2) {for(i=0;in;i++) {b[i]=*(x[0]+i); *(x[0]+i)=*(x[1]+i); } f1=f2; for(i=0;in;i++) *(x[1]+i)=a[i]+0.382*(b[i]-a[i]); f2=objf(x[1]); } else {for(i=0;in;i++) {a[i]=*(x[1]+i); *(x[1]+i)=*(x[0]+i); } f2=f1; for(i=0;in;i++) *(x[0]+i)=a[i]+0.618*(b[i]-a[i]); f1=o

文档评论(0)

1亿VIP精品文档

相关文档