机械优化设计二维搜索中坐标轮换法求解C++程序_第1页
机械优化设计二维搜索中坐标轮换法求解C++程序_第2页
机械优化设计二维搜索中坐标轮换法求解C++程序_第3页
机械优化设计二维搜索中坐标轮换法求解C++程序_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二维搜索题目:y=1.9*xl*xl+l.l*x2*x2-1.2*xl*x2+ll*xl-13*x2+19

初始点(1,2),精度0.000001运行结果:x(-1.241777,5.232949)y=-21.838148⑥E:\C语M二维搜T\erwei.exeinput:x2tl],x2(2]:13N=1a=7.292000b=8.708000N=2a=-0.854000b=-0.146000[-0.855358,6.455154]p=3.921791N=1a=4.601154b=5.309155N=2a—1.091358b—0.619358[-1.175135,5.442792]p=l.061666N=1a=5.206792b=5.678792N=2a=-l.411135b=-0.939135[-1.230134,5.268620]pM.182649N=1a=5.032620b=5.504620N=2a—1.466134b—0.994134[-1.239196,5.239353]pM.030638N=1a=5.003353b=5.475353N=2a=-l.475196b=-l.003196[-1.241777,5.233534]p=0.006366N=1『4.997534b=5.469534N=2a—1.477777b—1.005777[-1.241777,5.232949]p=0.000585N=1a=4.996949b=5.468949N=2a—1.477777b=-l.005777[-1.241777,5.232949]p=0.000000x=[-1.241777,5.232949]f(x)=-21.838148#iiiclude<math.h>#include<stdio.h>#include<stdlib.h>/*头文件,第3个配合主程序最后一句,是让程序画面停留功能*/floatf(floatxl,floatx2)(floaty;y=L9*xl*xl+l.l*x2*x2-1.2*xl*x2+ll*xl-13*x2+19;returny; /*二元二次方程,以功能块形式定义,等待调用*/}voidfun(floatx,floataO.floathO.float*a,float*b,intN)/*外推法寻找一维搜索区间,当N=1时,x2被一个常数代替,成为对xl进行一维搜索*/(floatyl,y2,y3,al,a2,a3,h;al=a0;h=hO;switch(N)(case1:yl=f(x,al);a2=al+h;y2=Rx,a2);break;case2:yl=Ral,x);a2=al+h;y2=Ra2,x);break;}if(y2>yl)(h=-h;a3=al;y3=yl;chf: al=a2;yl=y2; /*寻找高低高*/a2=a3;y2=y3;}a3=a2+h;switch(N)(case1:y3=f(x,a3);break;case2:y3=Ra3,x);break;}If(y3<y2)(h=2*h;gotochf;}else(lf(h<0)JI*a=a3;*b=al;}else(*a=al;*b=a3;} /*确定区间上下限a,b*/}printf(”N=%da=%fb=%f\n”,N,a,b);}floatfuii2(floatx^floata.floatbjntN)/*黄金分割法程序*/( floata1,a2,yl,y2,result;al=a+0.382*(b-a);a2=a+0.618*(b-a);switch(N) /*黄金分割法法寻找一维搜索区间,当N=1时,x2被一个常数代替,该功能块只对一个维度进行分割求解*/(case1:yl=f(x,al);y2=f(x,a2);break;case2:yl=Ral,x);y2=f(a2,x);break;}wlule(fabs((b-a))>0.000001) /*把黄金分割的精度进行设置*/if(yl>=y2)

a=al;al=a2;yl=y2;a2=a+0.618*(b-a);switch(N){case1:y2=Rx,a2);break;case2:y2=Ra2,x);break;))else)elseb=a2;a2=al;y2=yi;b=a2;a2=al;y2=yi;al=a+0.382*(b・a);switch(N){case1:yl=Rx,al);break;case2:yl=Ral,x);break;))}result=(a+b)/2;letuin(result);J*最后把某一方向上的“下一点坐标”求出*J/*主函数*/voidmain()/*主函数*/voidmain()floataO,110=1,p,a.b,y,xl[2]={0},x2[2]={0};/*用aO把暂不需要做搜索的维度上的坐标值以常数形式送入*/inti=0;pnntfC'input:x2[l],x2[2]:\ii");scanf(”%必f',&x2[l],&x2⑵);do{xl[l]=x2[l];xl[2]=x2[2]; /*把前一点的xl,x2方向的坐标值,分别传递给新点,也就是把新得到的点作为旧点进行下一轮搜索*/fiin(xl[l],xl[2],h0,&a,&b,l); /*N=1,x2方向被以常数形式固定,送入xl方向的初值xll,按照初始步长为1进行xl方向搜索*/x2[2]=fiiii2(xl[l],a,b,l);/*由给定前一点的xl方向的值,得到此方向下一个点的值*/fim(x2[2],xl[l],h0,&a,&b,2);x2[l]=fiin2(x2[2],a,b,2);i=i++;pnntf(”(%d)[%f,%f]”,i,x2[l],x2[2]);P=sqrt((x2[l]-xl[l])*(x2[l]-xl[l])+(x2[2]-xl[2])*(x2[2]-xl[2]));pnntf(”p=%f\n”,p);/*新旧两点之间的距离p*/}wlule(sqn((x2[1]-x1[1])*(x2[1]-x1[1])+(X2⑵-xl[2])*(x2[2]-xl[2]))>=0.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论