《黄金分割法复合形法实验报告》由会员分享,可在线阅读,更多相关《黄金分割法复合形法实验报告(17页珍藏版)》请在金锄头文库上搜索。
1、现代设计理论与方法实验报告学院:机械学院专业:机械设计制造及其自动化班级:201107班学号:201107705姓名:王博现代设计理论与方法实验报告一、实验目的现代设计理论与方法是一门实践性较强的课程,学生通过实际上机计算可以达到以下目的: 1加深对机械优化设计方法的基本理论和算法步骤的理解;2培养学生独立编制或调试计算机程序的能力; 3掌握常用优化方法程序的使用方法;4培养学生灵活运用优化设计方法解决工程实际问题的能力。二、实验项目、学时分配及对每个实验项目的要求序号实验项目学时实 验 要 求1黄金分割法21明确黄金分割法基本原理、计算步骤及程序框图;2编制或调试黄金分割法应用程序;3用测试
2、题对所编程序进行测试;4撰写实验报告。2复合形法41明确复合形法基本原理、计算步骤及程序框图等;2编制或调试复合形法应用程序;3用测试题对所编程序进行测试;4撰写实验报告。三、 测试题黄金分割法程序框图如下: 1黄金分割法程序测试题(1) ,取,程序如下:#include stdio.h#include math.h#include conio.h#define e 0.00001 #define tt 0.01 float function(float x) float y; y=pow(x,2)+10*x+36; return(y); void finding(float a3,float
3、 f3)float h=tt,a1,f1,ia;int i; a0=0; f0=function(a0); for(i=0;i+) a1=a0+h; f1=function(a1); if(f1=e) h=-h;a0=a1;f0=f1; else if(ia=1) return; h=h/2;ia=1; for(i=0;i+) a2=a1+h; f2=function(a2); if(f2f1) break; h=2*h; a0=a1;f0=f1; a1=a2;f1=f2; if(a0a2) a1=a0;f1=f0; a0=a2;f0=f2; a2=a1;f2=f1; return;float
4、 gold(float *ff) float a13,f13,a4,f4; float aa; int i; finding(a1,f1); a0=a10;f0=f10; a3=a12;f3=f12; a1=a0+0.382*(a3-a0); a2=a0+0.618*(a3-a0); f1=function(a1); f2=function(a2); for(i=0;i+) if(f1=f2) a0=a1;f0=f1; a1=a2;f1=f2; a2=a0+0.618*(a3-a0); f2=function(a2); else a3=a2;f3=f2; a2=a1;f2=f1; a1=a0+
5、0.382*(a3-a0); f1=function(a1); if(a3-a0)e) aa=(a1+a2)/2; *ff=function(aa); break; return(aa);void main()float xx,ff; xx=gold(&ff); printf(nThe Optimal Design Result Is:n); printf(ntx*=%fntf*=%f,xx,ff); getch(); 运行结果:(2) ,取,程序如下:#include stdio.h#include math.h#include conio.h#define e 0.00001 #defin
6、e tt 0.01 float function(float x) float y; y=pow(x,4)-5*pow(x,3)+4*pow(x,2)-6*x+60; return(y); void finding(float a3,float f3)float h=tt,a1,f1,ia;int i; a0=0; f0=function(a0); for(i=0;i+) a1=a0+h; f1=function(a1); if(f1=e) h=-h;a0=a1;f0=f1; else if(ia=1) return; h=h/2;ia=1; for(i=0;i+) a2=a1+h; f2=f
7、unction(a2); if(f2f1) break; h=2*h; a0=a1;f0=f1; a1=a2;f1=f2; if(a0a2) a1=a0;f1=f0; a0=a2;f0=f2; a2=a1;f2=f1; return;float gold(float *ff) float a13,f13,a4,f4; float aa; int i; finding(a1,f1); a0=a10;f0=f10; a3=a12;f3=f12; a1=a0+0.382*(a3-a0); a2=a0+0.618*(a3-a0); f1=function(a1); f2=function(a2); f
8、or(i=0;i+) if(f1=f2) a0=a1;f0=f1; a1=a2;f1=f2; a2=a0+0.618*(a3-a0); f2=function(a2); else a3=a2;f3=f2; a2=a1;f2=f1; a1=a0+0.382*(a3-a0); f1=function(a1); if(a3-a0)=0) float y; y=(x+1)*pow(x-2),2); return(y); void finding(float a3,float f3)float h=tt,a1,f1,ia;int i; a0=0; f0=function(a0); for(i=0;i+)
9、 a1=a0+h; f1=function(a1); if(f1=e) h=-h;a0=a1;f0=f1; else if(ia=1) return; h=h/2;ia=1; for(i=0;i+) a2=a1+h; f2=function(a2); if(f2f1) break; h=2*h; a0=a1;f0=f1; a1=a2;f1=f2; if(a0a2) a1=a0;f1=f0; a0=a2;f0=f2; a2=a1;f2=f1; return;float gold(float *ff) float a13,f13,a4,f4; float aa; int i; finding(a1,f1); a0=a10;f0=f10; a3=a12;f3=f12; a1=a0+0.382*(a3-a0); a2=a0+0.618*(a3-a0); f1=function(a1); f2=function(a2); for(i=0;i+) if(f1=f2) a0=a1;f0=f1; a1=a2;f1=f2; a2=a0+0.618*(a3-a0); f2=function(a2); el