当前位置:文档之家› 现代设计方法

现代设计方法

机械设计方法实验报告姓名:学号:成绩:指导教师:进退试算法实验报告一、实验目的1.加深对进退试算法的基本理论和算法步骤的理解。

2.培养独立编制、调试计算机程序的能力。

3.掌握常用优化程序的使用方法。

4.培养灵活运用优化设计方法解决工程实际问题的能力。

二、实验要求1.明确进退试算法基本原理及程序框图。

2.编制进退试算法程序。

三.实验内容计算实例:用进退试算法求函数())2tf的搜索区间。

(+=t t①.进退试算法基本原理简述进退试算法的基本思想是:按照一定的规律给出若干试算点,一次比较各试算点的函数值的大小,直到找出相邻的三点的函数值按“高——低——高”变化的单峰区间为止。

②、程序的流程图③.编制进退试算法程序#include<stdio.h>#include<math.h>#define f(t) (t*(t+2))void sb(double *a,double *b){double t0,t1,t,h,alpha,f0,f1;int k=0;printf("请输入初始点t0=");scanf("%lf",&t0);printf("\n请输入初始步长h=");scanf("%lf",&h);printf("\n请输入加步系数alpha(需大于1)=");scanf("%lf",&alpha);f0=f(t0);t1=t0+h;f1=f(t1);while(1){printf("\nf1=%lf,f2=%lf,t0=%lf,t=%lf,h=%lf,k=%d",f0,f1,t0,t1,h,k);if(f1<f0){h=alpha*h;t=t0;t0=t1;f0=f1;k++;}else{if(k==0){h=-h;t=t1;}else{*a=t<t1?t:t1;*b=t>t1?t:t1;break;}}t1=t0+h;f1=f(t1);}}main(){double a=0,b=0;double *c,*d;c=&a,d=&b;sb(c,d);printf("\na=%lf,b=%lf",a,b); }④.程序运行结果鲍威尔共轭方向法实验报告一、实验目的5. 加深对鲍威尔法的基本理论和算法步骤的理解。

6. 培养独立编制、调试计算机程序的能力。

7. 掌握常用优化程序的使用方法。

8. 培养灵活运用优化设计方法解决工程实际问题的能力。

二、实验要求3. 明确鲍威尔法基本原理及程序框图。

4. 编制鲍威尔法程序。

三.实验内容计算实例:用鲍威尔法求函数()212221212141060,x x x x x x x x f -++--=的极小值。

①.鲍威尔法基本原理简述任选一初始点X 0,再选两个线性无关的向量。

从X 0出发,顺次沿e 1、e 2作一维搜索得01X 、02X ,两点连线得一新方向d 1,用d1代替e 1形成两个线性无关向量e 2、d 1,作为下一轮搜索方向。

再从02X 出发,沿d 1作一维搜索得点01X ,作为下一轮迭代的初始点。

从X 1出发,顺次沿e 2、d 1作一维搜索,得到点11X 、12X ,两点的连线得一新方向d 2。

10X 、12X 两点是从不同点X 0、11X 出发,分别沿d 1方向进行一维搜索而得到的极小点。

再从12X 出发,沿d 2作一维搜索得点X 2,即是二维问题的极小点X *。

③.编制鲍威尔法程序#include "stdio.h"#include "stdlib.h"#include "math.h"double objf(double x[]){double ff;ff=60-10*x[0]-4*x[1]+x[0]*x[0]+x[1]*x[1]-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;i<3;i++)x[i]=(double *)malloc(n*sizeof(double));h=h0;for(i=0;i<n;i++)*(x[0]+i)=x0[i];f1=objf(x[0]);for(i=0;i<n;i++)*(x[1]+i)=*(x[0]+i)+h*s[i];f2=objf(x[1]);if(f2>=f1){ h=-h0;for(i=0;i<n;i++)*(x[2]+i)=*(x[0]+i);f3=f1;for(i=0;i<n;i++){*(x[0]+i)=*(x[1]+i);*(x[1]+i)=*(x[2]+i);}f1=f2;f2=f3;}for(;;){h=2*h;for(i=0;i<n;i++)*(x[2]+i)=*(x[1]+i)+h*s[i];f3=objf(x[2]);if(f2<f3) break;else{ for(i=0;i<n;i++){*(x[0]+i)=*(x[1]+i);*(x[1]+i)=*(x[2]+i);f1=f2;f2=f3;}}if(h<0)for(i=0;i<n;i++){a[i]=*(x[2]+i);b[i]=*(x[0]+i);}elsefor(i=0;i<n;i++){a[i]=*(x[0]+i);b[i]=*(x[2]+i);}for(i=0;i<3;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;i<2;i++)x[i]=(double *)malloc(n*sizeof(double));for(i=0;i<n;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(f1>f2){for(i=0;i<n;i++){b[i]=*(x[0]+i);*(x[0]+i)=*(x[1]+i);}f1=f2;for(i=0;i<n;i++)*(x[1]+i)=a[i]+0.382*(b[i]-a[i]);f2=objf(x[1]);}else{ for(i=0;i<n;i++){a[i]=*(x[1]+i);*(x[1]+i)=*(x[0]+i);}for(i=0;i<n;i++)*(x[0]+i)=a[i]+0.618*(b[i]-a[i]);f1=objf(x[0]);}q=0;for(i=0;i<n;i++)q=q+(b[i]-a[i])*(b[i]-a[i]);w=sqrt(q);}while(w>eps);for(i=0;i<n;i++)xx[i]=0.5*(a[i]+b[i]);ff=objf(xx);for(i=0;i<2;i++)free(x[i]);return(ff);}double oneoptim(double x0[],double s[],double h0,double epsg,int n,double x[]) {double *a,*b,ff;a=(double *)malloc(n*sizeof(double));b=(double *)malloc(n*sizeof(double));jtf(x0,h0,s,n,a,b);ff=gold(a,b,epsg,n,x);free(a);free(b);return (ff);}double powell(double p[],double h0,double eps,double epsg,int n,double x[]) {int i,j,m;double *xx[4],*ss,*s;double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;ss=(double *)malloc(n*(n+1)*sizeof(double));s=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++){for(j=0;j<=n;j++)*(ss+i*(n+1)+j)=0;*(ss+i*(n+1)+i)=1;}for(i=0;i<4;i++)xx[i]=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++)*(xx[0]+i)=p[i];for(;;){for(i=0;i<n;i++){*(xx[1]+i)=*(xx[0]+i);x[i]=*(xx[1]+i);}f0=f1=objf(x);dlt=-1;for(j=0;j<n;j++){for(i=0;i<n;i++){*(xx[0]+i)=x[i];*(s+i)=*(ss+i*(n+1)+j);}f=oneoptim(xx[0],s,h0,epsg,n,x);df=f0-f;if(df>dlt){dlt=df;m=j;}}sdx=0;for(i=0;i<n;i++)sdx=sdx+fabs(x[i]-(*(xx[1]+i)));if(sdx<eps){free(ss);free(s);for(i=0;i<4;i++)free(xx[i]);return(f);}for(i=0;i<n;i++)*(xx[2]+i)=x[i];f2=f;for(i=0;i<n;i++){*(xx[3]+i)=2*(*(xx[2]+i)-(*(xx[1]+i))); x[i]=*(xx[3]+i);}fx=objf(x);f3=fx;q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt); d=0.5*dlt*(f1-f3)*(f1-f3);if((f3<f1)||(q<d)){if(f2<=f3)for(i=0;i<n;i++)*(xx[0]+i)=*(xx[2]+i);elsefor(i=0;i<n;i++)*(xx[0]+i)=*(xx[3]+i);}else{for(i=0;i<n;i++){*(ss+(i+1)*(n+1))=x[i]-(*(xx[1]+i));*(s+i)=*(ss+(i+1)*(n+1));}f=oneoptim(xx[0],s,h0,epsg,n,x);for(i=0;i<n;i++)*(xx[0]+i)=x[i];for(j=m+1;j<=n;j++)for(i=0;i<n;i++)*(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j);}}}void main(){double p[]={0,0};double ff,x[2];ff=powell(p,0.002,0.000001,0.00000001,2,x);printf("\n所求函数是:f(x)=60-10*x[0]-4*x[1]+x[0]*x[0]+x[1]*x[1]-x[0]*x[1]");printf("\n使用鲍威尔法时的迭代初始点为:p(0,0)");printf("\n鲍威尔法的精度为:0.000001");printf("\n外推法的初始步长:ho为0.002");printf("\n黄金分割法的精度为:0.00000001");printf("\n求得极值点坐标为:x[0]=%f,x[1]=%f;极小值是:f(%f,%f)=%f\n",x[0],x[1],x[0],x[1],ff);}④.程序运行结果惩罚函数法实验报告一、实验目的1.掌握并能建立最优化基本类型问题的数学模型。

相关主题