收藏 分销(赏)

机械优化设计-一维搜索方法.doc

上传人:精*** 文档编号:3549403 上传时间:2024-07-09 格式:DOC 页数:4 大小:17.04KB 下载积分:5 金币
下载 相关 举报
机械优化设计-一维搜索方法.doc_第1页
第1页 / 共4页
机械优化设计-一维搜索方法.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
以f(x)=*x+2*x为例 黄金分割 #include <stdio.h> #define e 0.001//收敛精度 main(){ float a,b,x1,x2,y1,y2; float minx,miny; x1=-3;x2=5;//x1,x2初始化 a=x1;b=x2;//a1,a2初始化 do { x1=a+0.382*(b-a); x2=a+0.618*(b-a); y1=x1*x1+2*x1; y2=x2*x2+2*x2; if(y1>y2) a=x1; else b=x2; } while((b-a)>e);//两个数值小于收敛精度e时终结 minx=(x1+x2)/2;//取两数值平均值 miny=minx*minx+2*minx; printf("The minx is %f and the miny is %f.\n",minx,miny);//极小值 } 二次插值法 #include<stdio.h> #include<math.h> int main(void) { double a1,a2,a3,ap,y1,y2,y3,yp,c1,c2,m; double j[3]; int i,h=1; //取正向搜索(h值为负则为反向搜索)。 void finding(double a[3]);//一维搜索拟定区间。 finding(j);//返回所得旳区间值a1,a2,a3。 a1=j[0]; //以数组j[3]为过渡,衔接搜索区间旳值并赋值给主函数旳a1,a2,a3。 a2=j[1]; //事实上是不会这样用旳,此处是以便衔接一维搜索函数与主函数,后来可类似。 a3=j[2]; m=0.001; //**输入m值,以拟定精确度**。 double f(double x); //方程函数阐明。 y1=f(a1); //初始化。 y2=f(a2); y3=f(a3); for(i=1;1>=1;i++) { c1=(y3-y1)/(a3-a1); c2=((y2-y1)/(a2-a1)-c1)/(a2-a3); ap=0.5*(a1+a3-c1/c2); yp=f(ap); if(fabs((y2-yp)/y2)<m) break; else if((ap-a2)*h>0) { if(y2>=yp){ a1=a2;y1=y2; a2=ap;y2=yp;} else{ a3=ap;y3=yp;} } else if(y2>=yp){ a3=a2;y3=y2; a2=ap;y2=yp;} else{a1=ap;y1=yp;} } double x,y; //用x,y储存所得极值点。 if(y2<=yp){ x=a2;y=y2;} else{ x=ap;y=yp;} printf("a*=%f\n",x); printf("y*=%f\n",y); return 0; } //定义方程函数。 double f(double x) { double y; y=x*x-2*x; //**输入方程**。 return y; } //拟定区间旳外推法(取步长h=1)。 void finding(double a[3]) { int h,i; double y[3]; a[0]=0; //**0周边开始搜索** h=1; //**输入h值,以拟定步长**。 a[1]=h; y[0]=f(a[0]);y[1]=f(a[1]); //初始化。 if(y[1]>y[0]) //将逆方向寻找变向。 { h=-h; a[2]=a[0];y[2]=y[0]; do{ a[0]=a[1];a[1]=a[2]; y[0]=y[1];y[1]=y[2]; a[2]=a[1]+h;y[2]=f(a[2]); h=2*h; }while(y[2]<y[1]); } else{ //正方向寻找。 for(i=1;i>=1;i++){ a[2]=a[1]+h;y[2]=f(a[2]); if(y[2]>=y[1]) break; //寻找成功,打印输出。 h=2*h; a[0]=a[1];y[0]=y[1]; a[1]=a[2];y[1]=y[2];} } return; } 外推法 #include<stdio.h> float f(float t) { float z; z=t*t+2*t; return z; } void main() {float h0=1,h=h0,a1=0,a2=h,y1,y2,a3,y3; y1=f(a1); y2=f(a2); if(y2>y1) { h=-h;a3=a1;y3=y1; a1=a2;y1=y2;a2=a3;y2=y3; } a3=a2+h;y3=f(a3); while(y3<y2) { h=2*h; a1=a2;y1=y2;a2=a3;y2=y3; a3=a2+h;y3=f(a3); } printf("f(%f)=%f\nf(%f)=%f\nf(%f)=%f",a1,y1,a2,y2,a3,y3); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 行业资料 > 机械/制造/汽车

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服