当前位置: 主页 > 论文库 > 工学 > 工业设计 >

基于c语言的黄金分割法的优化设计

时间:2009-07-21 11:03 来源:www.lunwen163.com 作者:163论文网 点击:

[摘要] 机械优化设计是适应生产现代化要求发展起来的一门崭新的学科。它是在现代机械设计理论的基础上提出的一种更科学的设计方法,它可使机械产品的设计质量达到更高的要求。基于黄金分割法提出的利用C语言程序求解全局最优解的方法,是一种相当简单而有效的方法。
  [关键词] C语言; 黄金分割法; 优化设计
[Abstract] mechanical optimization design is to adapt to the modernization of production requirements of development of a new discipline. It is in the modern theory of mechanical design based on a more scientific design method, it will lunwen114enable the design of mechanical products to meet higher requirements for quality. Based on the golden section method proposed by the use of C language program for solving the global optimal solution method is a very simple and effective method.
[Key words] C language; golden section method; optimum design
  机械优化设计是应用数学方法寻求机械设计的最佳方案,首先要根据实际机械设计问题建立相应的数学模型,即用数学形式来描述实际机械设计问题。在建立数学模型时,需要应用专业知识确定设计的限制条件和所追求的目标,确立各设计变量之间的相互关系等。数学模型一旦建立,机械优化设计问题就变成一个数学求解。应用数学规划方法的理论,根据数学模型的特点,可以选择适当的方法,以计算机作为工具,求得最佳设计参数。
  非线性问题的求解一直是优化问题中的热点和难点,由于它是解决许多工程问题特别是控制问题的有效方法,所以受到人们极大的关注,并因此构造出许多求解约束和无约束优化问题的算法,如共轭方向法、二次插值法、进退法以及牛顿法等。这些经典算法在各种实际问题中起到了非常重要的作用并显示出其独特的优点。虽然已经有了不少很好的计算优化问题的方法,但好的方法总是不厌其多。该文根据一维搜索中的黄金分割法提出一种利用C语言程序求解全局最优解的方法,这是一种相当简单而有效的方法。
  一、黄金分割法及其基本原理
  黄金分割法是用于一元函数f(x)在确定的初始区间[a,b]内搜索极小点a*的一种方法。它是优化计算中的经典算法,以算法简单、效果明显而著称,是许多优化算法的基础。但它只适用于一维区间上的凸函数。其基本思想是:依照“去坏留好”原则、对称原则、以及等比收缩原则来逐步缩小搜索范围。具体地说,就是在区间[a,b]中取点 , ,如果 令 ;如果 令 ,重新开始。这样每次可将搜索区间缩小 倍或 倍,直至缩为一点。黄金分割法原理如图1所示,其中K=0.618,区间长度为L。该算法为收敛速度很快的一维搜索方法。受这一算法的启发,作为尝试,我们将这一方法推广到二维空间,并取得了成功。
 
图1 黄金分割法原理图
  二、C语言程序的概念及作用
  C语言程序是函数的集合体,每个函数都具有相对独立的单一功能。其中有且只有一个函数称为主函数,程序的执行总是从主函数开始,程序中主函数之外的其他函数,是在执行主函数时通过函数调用的方式得以执行。被调函数可以是用户自定义函数也可以是由系统提供的标准函数。C语言程序的函数结构十分有利于把整体程序分割成若干相对独立的功能模块,并且为程序模块间的相互调用以及数据传递提供了便捷的途径。
  下面应用C语言程序利用黄金分割法求一元函数 的最优解。已知初始区间为 ,取迭代精度 。
  C语言程序如下:
#include "math.h"
#include "stdio.h"
#define f(x) x*x-7*x+10       //一元函数 
//函数功能是用黄金分割法实现求一元函数 的最优解
double hj(double *a,double *b,double e,int *n)
{ double x1,x2,s;
  if(fabs(*b-*a)<=e)
      s=f((*b+*a)/2);
  else
  {  x1=*a+0.382*(*b-*a);
     x2=*a+0.618*(*b-*a);
     if(f(x1)>f(x2))
           *a=x1;
     else
           *b=x2;
     *n=*n+1;
     s=hj(a,b,e,n);
     }
  return s;
}
main()
{ double s,a,b,e;
  int n=0;
  scanf("%lf%lf%lf",&a,&b,&e);    // 输入区间[a,b]和精度e的值
  s=hj(&a,&b,e,&n);      //调用hj函数,其中n代表迭代次数
  printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n);
}
     输入:2 8 0.35
结果输出:a=3.416707 b=3.750565 s=-2.243038 n=6
  三、利用C语言程序解决优化设计问题应遵循的原则
  1、可靠性要好
  算法的可靠性是指在合理的精度要求下,在一定计算时间内或一定迭代次数内,求解优化问题的成功率,越高则可靠性越好。
  2、效率要高
  算法的效率是指解题的效率,如果目标函数和约束函数的数值计算比较复杂时,最好选用不计算梯度与海色矩阵的优化方法,尽可能选用计算过程中调用函数值次数少的优化方法。
  3、稳定性要好
  算法的稳定性指遇到高难度非线性的偏心率大的函数时,不会因为计算机字长截断误差迭代过程正常运行,而中断计算过程。
  4、采用成熟的计算程序
  对现有成熟的计算程序应尽可能采用,使得解题简易。
  四、结论 
  机械优化设计是适应生产现代化要求发展起来的,是一门崭新的学科。它是在现代机械设计理论的基础上提出的一种更科学的设计方法,它可使机械产品的设计质量达到更高的要求。因此,在加强现代机械设计理论研究的同时,还要进一步加强最优设计数学模型的研究,以便在近代数学、力学和物理学的新成就基础上,使其更能反映客观实际。同时机械优化设计的研究还必