优化设计 鲍威尔算法MICROSOFT WORD 文档.doc
上传人:sy****28 上传时间:2024-09-11 格式:DOC 页数:10 大小:20KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

优化设计 鲍威尔算法MICROSOFT WORD 文档.doc

优化设计鲍威尔算法MICROSOFTWORD文档.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第一个程序1:#include<stdio.h>#include<math.h>#defineTOL1.0e-3#definem10#defineRUN#definen2floatgolden(floata[],floatb[],floatc[],floattol,floatxmin[]);voidmnbrak(floata[],floatb[],floatc[],floatd[],float*fa,float*fb,float*fc);floatfunc(floatx[]){floatresult;result=60-10*x[0]-4*x[1]+x[0]*x[0]+x[1]*x[1]-x[0]*x[1];//result=10*(float)pow((x[0]+x[1]-5),2)+(float)pow((x[0]-x[1]),2);returnresult;}floatmain(void){inti,k,j,v=0,dmax=0,flag=0;floate,l,a[m],a1[m],a2[m],a3[m],b[m],c[m],d[m],d1[m][m],fa,fb,fc,xmin[m],xmin2[m],gold,amin,ac=0,x[m];printf("鲍威尔求二维函数最小值:\n");#ifdefRUNprintf("输入初始点:");for(i=0;i<n;i++){printf("\na[%d]=",i);scanf("%f",&a[i]);}for(k=0;k<n;k++){printf("\n输入初始搜索方向%d:\n",i);for(j=0;j<n;j++){printf("\nd%d[%d]=",k,j);scanf("%f",&d1[k][j]);}}printf("输入搜索精度e:\n");scanf("%f",&e);#endif#ifndefRUNfor(i=0;i<n;i++)a[i]=0;d1[0][0]=1;d1[0][1]=0;d1[1][0]=0;d1[1][1]=1;e=0.001;#endif//开始进行搜索////printf("开始进行最小搜索\n");for(v=0;v<10000;v++)//一共最多进行10000次搜索{//printf("已开始进行%d轮搜索\n",v+1);for(i=0;i<n;i++)a1[i]=a[i];//保存起始点a[]for(k=0;k<n;k++)//分别对所给方向进行搜索共n次{//printf("已开始进行第%d个方向的搜索\n",k);for(j=0;j<n;j++){d[j]=d1[k][j];//printf("tiaoshi");a2[j]=a[j];}//printf("tiaoshi");//保存每次搜索的起点用于计算差值mnbrak(a,b,c,d,&fa,&fb,&fc);gold=golden(a,b,c,TOL,xmin);for(i=0;i<n;i++)//替换起点a[]准备下次搜索的起点a[i]=xmin[i];amin=gold-func(a2);//amin中间点的差值if(flag==0){ac=amin;flag=1;}if(ac<amin){ac=amin;//ac储存n个中最大差值dmax=k;//储存n次中差值最大的搜索方向。}}for(i=0;i<n;i++)//计算d(n+1)和用a3来保存反射点x(n+1){d[i]=xmin[i]-a1[i];a3[i]=2*xmin[i]-a1[i];xmin2[i]=xmin[i];//保存xmin此轮的最后一个值}floatF0,F2,F3;//进行判断是否满足条件F0=func(a1);F2=func(xmin);F3=func(a3);if((F3<F0)&&((F0-2*F2+F3)*(F0-F2-ac)*(F0-F2-ac)<0.5*ac*(F0-F3)*(F0-F3))){for(k=dmax;k<n;k++)for(i=0;i<n;i++)d1[dmax][i]=d1[dmax+1][i];fo