(2010-2011学年第二学期)
姓名: 张晓翔 班级:机械设计(4)班 学号: 0901104040 指导老师:黄致建老师
华侨大学厦门工学院
机械工程系
2011年12月12日
机械优化设计黄金分割法求最优值
1、黄金分割法基本思路:
黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。因此,这种方法的适应面非常广。黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点a1,a2,并计算其函数值。a1,a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
2、目标函数方程:
F=0.8*x^4-5*x^3-1*x^2-10*x+151
3 程序流程图如下:
求区间,如下程序
#include #define f(x) 0.8*pow(x,4)-5*pow(x,3)-1*pow(x,2)-10*x+151 main() { double dum,y0,y1,y2,x0,x1,x2,h,e,a,b,k; printf(\"x0=\"); scanf(\"%lf\ printf(\"h=\"); scanf(\"%lf\ printf(\"e=\"); scanf(\"%lf\ y0=f(x0); x1=x0+h; y1=f(x1); if(y0 for(k=0;k {dum=x0;x0=x2;x2=dum;} } else { x0=x1;x1=x2; y0=y1;y1=y2; } } a=x0;b=x2; printf(\"a=%.4lf b=%.4lf\\n\} 区间[-20,10]精度0.0001 带入黄金分割法程序 #include \"stdio.h\" #include \"math.h\" double f(double x) { return 0.8*pow(x,4)-5*pow(x,3)-1*pow(x,2)-10*x+151; } void main( void) { double a1,y1,a2,y2,a,b,k,e; a=0; b=10; e=0.001; k=0.618; a1=b-k*(b-a); y1=f(a1); a2=a+k*(b-a); y2=f(a2); while(fabs(b-a)>e) { if(y1>=y2) {a=a1; a1=a2;y1=y2; a2=a+k*(b-a); y2=f(a2); } else { b=a2; a2=a1; y2=y1; a1=b-k*(b-a); y1=f(a1); } } printf(\"x*=%f\\n\ printf(\"y*=%f\\n\} x*=4.9242084 y*=-49.144121 因篇幅问题不能全部显示,请点此查看更多更全内容