现代设计方法_第1页
现代设计方法_第2页
现代设计方法_第3页
现代设计方法_第4页
现代设计方法_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、机械设计方法实验报告 姓名: 学号: 成绩: 指导教师: 进退试算法实验报告一、 实验目的1. 加深对进退试算法的基本理论和算法步骤的理解。2. 培养独立编制、调试计算机程序的能力。3. 掌握常用优化程序的使用方法。4. 培养灵活运用优化设计方法解决工程实际问题的能力。二、实验要求1. 明确进退试算法基本原理及程序框图。2. 编制进退试算法程序。三实验内容计算实例:用进退试算法求函数的搜索区间。.进退试算法基本原理简述进退试算法的基本思想是:按照一定的规律给出若干试算点,一次比较各试算点的函数值的大小,直到找出相邻的三点的函数值按“高低高”变化的单峰区间为止。、程序的流程图.编制进退试算法程序

2、#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(

3、"%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;doub

4、le *c,*d;c=&a,d=&b;sb(c,d);printf("na=%lf,b=%lf",a,b); 程序运行结果鲍威尔共轭方向法实验报告一、实验目的5. 加深对鲍威尔法的基本理论和算法步骤的理解。6. 培养独立编制、调试计算机程序的能力。7. 掌握常用优化程序的使用方法。8. 培养灵活运用优化设计方法解决工程实际问题的能力。二、实验要求3. 明确鲍威尔法基本原理及程序框图。4. 编制鲍威尔法程序。三实验内容计算实例:用鲍威尔法求函数的极小值。.鲍威尔法基本原理简述 任选一初始点X0,再选两个线性无关的向量。从X0出发,顺次沿e1、e2作一维搜索得、

5、,两点连线得一新方向d1,用d1代替e1形成两个线性无关向量e2、d1,作为下一轮搜索方向。再从出发,沿d1作一维搜索得点,作为下一轮迭代的初始点。从X1出发,顺次沿e2、d1作一维搜索,得到点、,两点的连线得一新方向d2。、两点是从不同点X0、出发,分别沿d1方向进行一维搜索而得到的极小点。再从出发,沿d2作一维搜索得点X2,即是二维问题的极小点X*。结束 i=n ? 判别条件是否满足? 开始给定、程序的流程图 .编制鲍威尔法程序#include "stdio.h"#include "stdlib.h"#include "math.h&quo

6、t;double objf(double x) double ff; ff=60-10*x0-4*x1+x0*x0+x1*x1-x0*x1;return(ff); void jtf(double x0,double h0,double s,int n,double a,double b) int i;double *x3,h,f1,f2,f3;for(i=0;i<3;i+)xi=(double *)malloc(n*sizeof(double); h=h0; for(i=0;i<n;i+) *(x0+i)=x0i;f1=objf(x0); for(i=0;i<n;i+) *(

7、x1+i)=*(x0+i)+h*si;f2=objf(x1);if(f2>=f1) h=-h0; for(i=0;i<n;i+) *(x2+i)=*(x0+i); f3=f1; for(i=0;i<n;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; for(;) h=2*h; for(i=0;i<n;i+) *(x2+i)=*(x1+i)+h*si; f3=objf(x2); if(f2<f3) break; else for(i=0;i<n;i+) *(x0+i)=*(x1+i); *(x1+i)=*

8、(x2+i); f1=f2; f2=f3; if(h<0) for(i=0;i<n;i+) ai=*(x2+i); bi=*(x0+i); else for(i=0;i<n;i+) ai=*(x0+i); bi=*(x2+i); for(i=0;i<3;i+) free(xi); double gold(double a,double b,double eps,int n,double xx) int i;double f1,f2,*x2,ff,q,w;for(i=0;i<2;i+)xi=(double *)malloc(n*sizeof(double); for

9、(i=0;i<n;i+) *(x0+i)=ai+0.618*(bi-ai); *(x1+i)=ai+0.382*(bi-ai); f1=objf(x0); f2=objf(x1); do if(f1>f2) for(i=0;i<n;i+) bi=*(x0+i); *(x0+i)=*(x1+i); f1=f2; for(i=0;i<n;i+) *(x1+i)=ai+0.382*(bi-ai); f2=objf(x1); else for(i=0;i<n;i+) ai=*(x1+i); *(x1+i)=*(x0+i); f2=f1; for(i=0;i<n;i+

10、) *(x0+i)=ai+0.618*(bi-ai); f1=objf(x0); q=0;for(i=0;i<n;i+) q=q+(bi-ai)*(bi-ai);w=sqrt(q);while(w>eps); for(i=0;i<n;i+) xxi=0.5*(ai+bi); ff=objf(xx); for(i=0;i<2;i+)free(xi); return(ff); double oneoptim(double x0,double s,double h0,double epsg,int n,double x) double *a,*b,ff;a=(double *

11、)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 *xx4,*ss,*s;double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;ss=(double *)malloc(n*(

12、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+)xxi=(double *)malloc(n*sizeof(double); for(i=0;i<n;i+)*(xx0+i)=pi; for(;)for(i=0;i<n;i+) *(xx1+i)=*(xx0+i); xi=*(xx1+i); f0=f1=objf(x); dlt=-1

13、; for(j=0;j<n;j+) for(i=0;i<n;i+) *(xx0+i)=xi; *(s+i)=*(ss+i*(n+1)+j); f=oneoptim(xx0,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(xi-(*(xx1+i); if(sdx<eps) free(ss); free(s); for(i=0;i<4;i+) free(xxi); return(f); for(i=0;i<n;i+) *(xx2+i)=

14、xi; f2=f; for(i=0;i<n;i+) *(xx3+i)=2*(*(xx2+i)-(*(xx1+i); xi=*(xx3+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+) *(xx0+i)=*(xx2+i); else for(i=0;i<n;i+) *(xx0+i)=*(xx3+i); else for(i=0;i<n;i+)

15、 *(ss+(i+1)*(n+1)=xi-(*(xx1+i); *(s+i)=*(ss+(i+1)*(n+1); f=oneoptim(xx0,s,h0,epsg,n,x); for(i=0;i<n;i+) *(xx0+i)=xi; 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,x2; ff=powell(p,0.002,0.000001,0.00000001,2,x); printf("n所求函数是:

16、f(x)=60-10*x0-4*x1+x0*x0+x1*x1-x0*x1"); printf("n使用鲍威尔法时的迭代初始点为:p(0,0)"); printf("n鲍威尔法的精度为:0.000001"); printf("n外推法的初始步长:ho为0.002"); printf("n黄金分割法的精度为:0.00000001"); printf("n求得极值点坐标为:x0=%f,x1=%f;极小值是:f(%f,%f)=%fn",x0,x1,x0,x1,ff); 程序运行结果惩罚函数法实

17、验报告1、 实验目的1.掌握并能建立最优化基本类型问题的数学模型。 2. 掌握最优化方法的基本概念、基本理论和基本方法,奠定最优化的理论基础。3. 能够熟练编制和调试最优化方法的程序,奠定解决实际中的优化问题的基础。2、 实验要求1.明确惩罚函数法基本原理及程序框图。2. 编制惩罚函数法程序。3 实验内容计算实例:用惩罚函数法求函数的极小值。.惩罚函数法基本原理简述、程序的流程图 .编制惩罚函数法程序#include "stdio.h"#include "stdlib.h"#include "math.h"double objf(do

18、uble x)double ff;ff=x0*x0+2*x1*x1-4*x0-2*x0*x1;return(ff);void jtf(double x0,double h0,double s,int n,double a,double b) int i;double *x3,h,f1,f2,f3;for(i=0;i<3;i+)xi=(double *)malloc(n*sizeof(double);h=h0;for(i=0;i<n;i+) *(x0+i)=x0i;f1=objf(x0);for(i=0;i<n;i+)*(x1+i)=*(x0+i)+h*si;f2=objf(x

19、1);if(f2>=f1) h=-h0; for(i=0;i<n;i+) *(x2+i)=*(x0+i); f3=f1; for(i=0;i<n;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; for(;) h=2*h; for(i=0;i<n;i+) *(x2+i)=*(x1+i)+h*si; f3=objf(x2); if(f2<f3) break; else for(i=0;i<n;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; if(h&l

20、t;0) for(i=0;i<n;i+) ai=*(x2+i); bi=*(x0+i); else for(i=0;i<n;i+) ai=*(x0+i); bi=*(x2+i); for(i=0;i<3;i+) free(xi); double gold(double a,double b,double eps,int n,double xx)int i;double f1,f2,*x2,ff,q,w;for(i=0;i<2;i+)xi=(double *)malloc(n*sizeof(double); for(i=0;i<n;i+) *(x0+i)=ai+0.

21、618*(bi-ai); *(x1+i)=ai+0.382*(bi-ai); f1=objf(x0); f2=objf(x1);do if(f1>f2) for(i=0;i<n;i+) bi=*(x0+i); *(x0+i)=*(x1+i); f1=f2; for(i=0;i<n;i+) *(x1+i)=ai+0.382*(bi-ai); f2=objf(x1); else for(i=0;i<n;i+) ai=*(x1+i); *(x1+i)=*(x0+i); f2=f1; for(i=0;i<n;i+) *(x0+i)=ai+0.618*(bi-ai); f1

22、=objf(x0); q=0;for(i=0;i<n;i+) q=q+(bi-ai)*(bi-ai);w=sqrt(q);while(w>eps);for(i=0;i<n;i+) xxi=0.5*(ai+bi); ff=objf(xx); for(i=0;i<2;i+)free(xi); 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=(do

23、uble *)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 *xx4,*ss,*s;double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;ss=(double *)malloc(n*(n+1)*sizeof(double); s=(double

24、*)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+)xxi=(double *)malloc(n*sizeof(double); for(i=0;i<n;i+)*(xx0+i)=pi; for(;)for(i=0;i<n;i+) *(xx1+i)=*(xx0+i); xi=*(xx1+i); f0=f1=objf(x); dlt=-1; for(j=0;j<n;j+) for(i=0;i&

25、lt;n;i+) *(xx0+i)=xi; *(s+i)=*(ss+i*(n+1)+j); f=oneoptim(xx0,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(xi-(*(xx1+i); if(sdx<eps) free(ss); free(s); for(i=0;i<4;i+) free(xxi); return(f); for(i=0;i<n;i+) *(xx2+i)=xi; f2=f; for(i=0;i<n;i+) *(xx

温馨提示

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

评论

0/150

提交评论