资源描述:
《共轭梯度法-机械优化设计.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验报告实验课程名称机械优化设计实验项目名称共轭梯度法年级专业学生姓名学号实验时间:2012年11月2日8学生所在学院:专业:班级:姓名学号实验组实验时间指导教师成绩实验项目名称共轭梯度法求函数极小值1、实验目的及要求:实验目的:掌握机械优化设计方法并能够理论联系实际地加以应用,任务是将课程所学的知识应用于实践,通过实际编写调试及运行程序加深理论知识的掌握并提高解决优化问题的能力。根据实验指导书的要求应能够独立的编写优化程序并在计算机上运行,学会判断结果及程序的正确性,学会建立机械优化设计的数学模型,合理选用优化方法,独立的解决机械优化设计的实际问题。实验(或算
2、法)原理:共轭梯度法是共轭方向法中的一种,该方法中每一个共轭向量都是依赖与迭代点处的负梯度而构造出来。它通过梯度来寻找极小点。先通过一维搜索确定搜索区间,然后再通过共轭梯度法运用c语言编程求解。实验硬件及软件平台:vs20108实验步骤:1.确定所需求解的函数y=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2)2.确定搜索区间3.画出程序框图4.用c语言在vs2010上写出源代码5.运行程序6.检验试验结果,分析结果实验内容(包括实验具体内容、算法分析、源代码等等):本实验通过c语言编程,运用共轭梯度法求解函数y极小值;程序框图8
3、源程序#include#include#defineN10#defineepspow(10,-6)doublef(doublex[],doublep[],doublet){doubles;s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2);returns;}voidsb(double*a,double*b,doublex[],doublep[]){doublet0,t1,t,h,alpha,f0,f1;intk=0;t0=2.5;/*初始值*/h=1;/*初始步长*/alpha=2;/*加步系数
4、*/f0=f(x,p,t0);t1=t0+h;f1=f(x,p,t1);while(1){if(f1t1?t:t1;break;8}}t1=t0+h;f1=f(x,p,t1);}}doublehjfg(doublex[],doublep[]){doublebeta,t1,t2,t;doublef1,f2;doublea=0,b=0;double*c,*d;c=&a,d=&b;sb(c,d,x,p
5、);printf("x1=%lf,x2=%lf,p1=%lf,p2=%lf",x[0],x[1],p[0],p[1]);printf("[a,b]=[%lf,%lf]",a,b);system("pause");beta=(sqrt(5)-1.0)/2;t2=a+beta*(b-a);f2=f(x,p,t2);t1=a+b-t2;f1=f(x,p,t1);while(1){if(fabs(t1-t2)6、}else{a=t1;t1=t2;f1=f2;t2=a+beta*(b-a);f2=f(x,p,t2);8}}}t=(t1+t2)/2;returnt;}voidgtd(){doublex[N],g[N],p[N],t=0,f0,mod1=0,mod2=0,nanda=0;inti,k,n;printf("请输入函数的元数值n=");scanf("%d",&n);printf("请输入初始值");for(i=0;i7、t(pow(g[0],2)+pow(g[1],2));if(mod1>eps){p[0]=-g[0];p[1]=-g[1];k=0;while(1){t=hjfg(x,p);printf("p1=%lf,p2=%lf,t=%lf",p[0],p[1],t);x[0]=x[0]+t*p[0];x[1]=x[1]+t*p[1];g[0]=2*x[0];g[1]=50*x[1];/*printf("x1=%lf,x2=%lf,g1=%lf,g2=%lf",x[0],x[1],g[0],g[1]);*/mod2=sqrt(pow(g[0],2)+pow(g[1]
8、,2));if(mod2