机械优化设计实验指导书

上传人:回**** 文档编号:146910822 上传时间:2022-09-01 格式:DOC 页数:11 大小:42KB
返回 下载 相关 举报
机械优化设计实验指导书_第1页
第1页 / 共11页
机械优化设计实验指导书_第2页
第2页 / 共11页
机械优化设计实验指导书_第3页
第3页 / 共11页
点击查看更多>>
资源描述
实验一一维搜索方法本实验求函数 f(x)=(x-3)2 以及f(x)=-(x-3)2的搜索区间a, b。并用黄金分割法和插值法分别求最优解。进退法:#include #include /* 函数 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 (y20) * 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 (y1e); */*二次插值法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)x2) if (f2fp) * else * else if (f2fp) x1=xp; f1=fp; else * xp0=xp; k+;实验二无约束优化方法-鲍威尔方法本实验用鲍威尔方法求函数 f(x)=(x1-5)2+(x2-6)2 的最优解。#include #include #include const MAXN = 10;double xkkMAXN,xkMAXN,skMAXN;int N;double F(double *x) return 4*pow(x0-5,2.0)+pow(x1-6,2.0);double f(double x)for (int i=0; iN; i+) xkki=xki+x*ski;return F(xkk);/*无约束坐标轮换法x0-初始点e1-一维搜索精度e2-求解精度*/double nc_trans(double *x0,double e1,double e2)int i,j,k=1;double a,b,ax,ay,d;for (;) for (j=0; jN; j+) xkj=x0j; for (i=0; iN; i+) for (j=0; jN; j+) if (j=i) skj=1; else skj=0; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for (j=0; jN; j+) xkj=xkkj; d=0; for (j=0; jN; j+) d+=(x0j-xkkj)*(x0j-xkkj); d=sqrt(d); printf(k=%d;,k); for (j=0; jN; j+) printf(,x%d=%lf;,j+1,xkkj); printf(d=%lfn,d); if (d=e1) break; for (j=0; jN; j+) x0j=xkkj; k+;for (j=0; jN; j+) x0j=xkkj;return F(xkk);/*鲍威尔法x0-初始点e1-一维搜索精度e2-求解精度*/double nc_powell(double *x0,double e1,double e2)int i,j,k=1,m;double a,b,ax,ay,d;double ssMAXNMAXN,s1MAXN, ffMAXN,xMAXN,xnMAXN, xn1MAXN,f0,f1,f2,f3;for (i=0; iN; i+) for (j=0; jN; j+) if (j=i) ssij=1; else ssij=0;for (;) for (j=0; jN; j+) xkj=x0j; for (i=0; iN; i+) for (j=0; jN; j+) skj=ssij; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for (j=0; jN; j+) xkj=xkkj; ffi=F(xk); for (j=0; jN; j+) xnj = xkkj; for (j=0; jN; j+) skj=xkkj-x0j; s1j=skj; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for (j=0; jN; j+) xj=xkkj; d=0; for (j=0; jN; j+) d+=(xj-x0j)*(xj-x0j); d=sqrt(d); printf(k=%d;,k); for (j=0; jN; j+) printf(x%d=%lf;,j+1,x0j); printf(d=%lfn,d); if (d=e1) for (j=0; jN; j+) x0j=xj; break; f0=F(x0); d=f0-ff0; m=0; for (j=1; jN; j+) if (dffj-1-ffj) m=j; d=ffj-1-ffj; for (j=0; j=d) if (f2f3) for (j=0; jN; j+) x0j=xnj; else for (j=0; jN; j+) x0j=xn1j; else for (i=m+1; iN; i+) for (j=0; jN; j+) ssi-1j=ssij; for (j=0; jN; j+) ssN-1j=s1j; for (j=0; jN; j+) x0j=xj; k+;for (j=0; jN; j+) x0j=xkkj;return F(xkk);实验三无约束优化方法-DFP方法本实验用DFP方法求函数 f(x)=(x1-5)2+(x2-6)2 的最优解。/* DFP法-求梯度*/double DF(double *x,double *df)df0=8*(x0-5); df1=2*(x1-6);return (sqrt(df0*df0+df1*df1);/* DFP法-求构造矩阵Ak+1*/void computer_A(double AMAXN, double *cc, double *yy)double BMAXNMAXN,CMAXNMAXN, DMAXNMAXN,EMAXNMAXN;double a,b,c; int i,j,k;for (i=0; iN; i+) for (j=0; jN; j+) Bij=cci*ccj;for (i=0; iN; i+) for (j=0; jN; j+) Dij=yyi*yyj;for (i=0; iN; i+) for (j=0; jN; j+) Eij=0; for (k=0; kN; k+) Eij+=Aik*Dkj;for (i=0; iN; i+) for (j=0; jN; j+) Cij=0; for (k=0; kN; k+) Cij+=Eik*Akj;a=0; for (i=0; iN; i+) a+=cci*cci;b=0;for (i=0; iN; i+) c=0; for (j=0; jN; j+) c+=yyj*Aji; b+=c*yyi;for (i=0; iN; i+) for (j=0; jN; j+) Aij+=Bij/a-Cij/b;/*DFP法x0-初始点e1-一维搜索精度e2-求解精度*/double nc_dfp(double *x0,double e1,double e2)int i,j,k;double a,b,ax,ay,d;double AMAXNMAXN,gkMAXN, g0MAXN, ccMAXN,yyMAXN;d=DF(x0,g0);if (d=e1) return F(x0);for (;) for (i=0; iN; i+) for (j=0; jN; j+) if (j=i) Aij=1; else Aij=0; for (i=0; iN; i+) xki=x0i; for (k=0; kN; k+) for (j=0; jN; j+) skj=0;for (i=0; iN; i+) skj+=-Aji*g0i; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); printf(=%lf=,ax); for (j=0; jN; j+) xkj=xkkj; d=DF(xk,gk); for (j=0; jN; j+) printf(x%d=%lf;,j+1,xkj); printf(d=%lfn,d); if (d=e1) for (i=0; iN; i+) x0i=xki;return F(x0); for (i=0; iN; i+) cci=xki-x0i; yyi=gki-g0i; computer_A(A,cc,yy); for (i=0; iN; i+) x0i=xki; g0i=gki; 实验四约束优化方法-约束随机方向法 本实验用随机方向法求目标函数的最优解。数学模型:F(x)=(x1-8)2+(x2-8)2 g1(x)=x1 g2(x)=x2-1 g3(x)=11-x1-x2 #include #include #include #include #define sqr(x) (x)*(x) #define N 10int nt;double funt(double *x,double *g,int *b)int i;g0=x0; g1=x1-1; g2=11-x0-x1;*b=1;for (i=0; int; i+) if (gi0) *b=0; break;return sqr(x0-8)+sqr(x1-8);void find_sk(int nmax,double sk)double sm,c;int i;sm = 0;for (i = 0; i nmax; i+) c =(double)(rand()+1.0)/RAND_MAX; c = 2*c-1; sm += c*c; ski = c;sm = sqrt(sm);for (i = 0; inmax; i+) ski = ski/sm;void main()double a,a0,f0,f,e,skN,xkN,x0N,gN; int b1,b2,b,mt,M,i,k; nt=3; M=50; a0=0.4,e=0.01;x00=2; x01=3; mt=2;f0 = funt(x0,g,&b); for(i=0; imt; i+) xki=x0i;if(!b) return;k=0;srand( (unsigned)time( NULL ) );for(;) if(a0=e) break;if(k=M) a0=0.5*a0; k=0;find_sk(mt,sk); a=a0;for (i = 0; imt; i+) xki = x0i+a*ski;f=funt(xk,g,&b1); b=0;if(!(b1 & ff0) a=-a0; for (i = 0; imt; i+) xki = x0i+a*ski; f=funt(xk,g,&b2); if(b2 & ff0) b=1; else b=1;if(!b) k+; continue;k=0; f0=f;for(i=0; imt; i+) x0i=xki;for(;) for (i = 0; imt; i+) xki = x0i+a*ski; f=funt(xk,g,&b1); if(b1 & ff0) f0=f; for(i=0; imt; i+) x0i=xki; else break;printf(%sn, * 最优结果 *);for (i = 0; imt; i+) printf(x*%d = %lfn,i+1,x0i);printf(f* = %lfn,f0);/* * 最优结果 * x*1 = 5.511014 x*2 = 5.488826 f* =12.501044*/实验五约束优化方法-复合型法 本实验用复合型法求目标函数的最优解。数学模型:F(x)=(x1-8)2+(x2-8)2 g1(x)=x1 g2(x)=x2-1 g3(x)=11-x1-x2 #include #include #include #include #define sqr(x) (x)*(x) #define N 10int nt;double funt(double *x,double *g,int *b)int i;g0=x0; g1=x1-1; g2=11-x0-x1;*b=1;for (i=0; int; i+) if (gi0) *b=0; break;return sqr(x0-8)+sqr(x1-8);/* 排序-按函数值从小到大 */void sort(double pxNN,double *pf,int K,int mt)int i,j,k;double t;for(i=0; iK-1; i+) for(j=i+1; jK; j+) if(pfjpfi) t=pfi; pfi=pfj; pfj=t;for(k=0; kmt; k+) t=pxik; pxik=pxjk; pxjk=t;void main()int i,j,mt,b;double a,f,f0,fr,d,e,c,gN,x0N,xrN;int H,K;/*H-坏点,K-复合形顶点数*/double pxNN,pfN;/*复合形顶点及相应的函数值*/double XLN=2,2,XHN=10,10;/*给定变量的下限和上限*/ nt=3; /*不等式个数*/ mt=2; /*变量个数*/ e=0.001; K=3;srand( (unsigned)time( NULL ) );for(i=0; iK; i+) /*产生初始复合形 */ do for (j = 0; j mt; j+) c =(double)(rand()+1.0)/RAND_MAX; pxij=XLj+c*(XHj-XLj);pfi=funt(pxi,g,&b); while (!b);sort(px,pf,K,mt);for(;) a=1.3; H=K-1;for(;) for(i=0; imt; i+) x0i=0; for(j=0; jK; j+)if(j!=H)x0i+=pxji;x0i/=K-1; for(i=0; imt; i+) xri=x0i+a*(x0i-pxHi); fr=funt(xr,g,&b); if(b & frpfK-1) break; if(a1.0e-5)a=1.3; H-; else a*=0.5; for(i=0; imt; i+) pxK-1i=xri;pfK-1=fr; sort(px,pf,K,mt);d=0; for(i=1; imt; i+) d+=sqr(pfi-pf0);d=sqrt(d)/K; if(de) break;d=0; for(i=1; imt; i+) d+=sqr(pfi-pf0);if(de) break;d=0; for(i=1; imt; i+) d+=fabs(pfi-pf0);if(de) break;f0=pf0; for(i=0; imt; i+) x0i=px0i;printf(%sn, * 最优结果 *);for (i = 0; imt; i+) printf(x*%d = %lfn,i+1,x0i);printf(f* = %lfn,f0);/ 最优结果 x*1 = 5.749423 x*2 = 5.203676 f* = 12.884525
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!