一维搜索进退法c语言程序,基于c语言黄金分割法优化设计.doc

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

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

【摘 要】 机械优化设计是适应生产现代化要求发展起来的一门崭新的学科。它是在现代机械设计理论的基础上提出的一种更科学的设计方法,它可使机械产品的设计质量达到更高的要求。基于黄金分割法提出的利用C语言程序求解全局最优解的方法,是一种相当简单而有效的方法。??

【关键词】 C语言;黄金分割法;优化设计?オ?

机械优化设计是应用数学方法寻求机械设计的最佳方案,首先要根据实际机械设计问题建立相应的数学模型,即用数学形式来描述实际机械设计问题。在建立数学模型时,需要应用专业知识确定设计的限制条件和所追求的目标,确立各设计变量之间的相互关系等。数学模型一旦建立,机械优化设计问题就变成一个数学求解。应用数学规划方法的理论,根据数学模型的特点,可以选择适当的方法,以计算机作为工具,求得最佳设计参数。??

非线性问题的求解一直是优化问题中的热点和难点,由于它是解决许多工程问题特别是控制问题的有效方法,所以受到人们极大的关注,并因此构造出许多求解约束和无约束优化问题的算法,如共轭方向法、二次插值法、进退法以及牛顿法等。这些经典算法在各种实际问题中起到了非常重要的作用并显示出其独特的优点。虽然已经有了不少很好的计算优化问题的方法,但好的方法总是不厌其多。该文根据一维搜索中的黄金分割法提出一种利用C语言程序求解全局最优解的方法,这是一种相当简单而有效的方法。??

一、黄金分割法及其基本原理??

黄金分割法是用于一元函数f(x)在确定的初始区间[a,b]内搜索极小点a??*的一种方法。它是优化计算中的经典算法,以算法简单、效果明显而著称,是许多优化算法的基础。但它只适用于一维区间上的凸函数。其基本思想是:依照“去坏留好”原则、对称原则、以及等比收缩原则来逐步缩小搜索范围。具体地说,就是在区间[a,b]中取点??x??1=a+0.382(b-a),x??2=a+0.618(b-a),如果f(x??1)>f(x??2), 令a=x??1;如果f(x??1)≤f(x??2),令b=x??2,重新开始。这样每次可将搜索区间缩小0.382倍或0.618倍,直至缩为一点。黄金分割法原理如图1所示,其中K=0.618,区间长度为L。该算法为收敛速度很快的一维搜索方法。受这一算法的启发,作为尝试,我们将这一方法推广到二维空间,并取得了成功。????

二、C语言程序的概念及作用??

C语言程序是函数的集合体,每个函数都具有相对独立的单一功能。其中有且只有一个函数称为主函数,程序的执行总是从主函数开始,程序中主函数之外的其他函数,是在执行主函数时通过函数调用的方式得以执行。被调函数可以是用户自定义函数也可以是由系统提供的标准函数。C语言程序的函数结构十分有利于把整体程序分割成若干相对独立的功能模块,并且为程序模块间的相互调用以及数据传递提供了便捷的途径。??

下面应用C语言程序利用黄金分割法求一元函数f(X)=X??2-7X+10的最优解。已知初始区间为[2,8],取迭代精度e=0.35。??

C语言程序如下:??

#include″math.h″??

#include″stdio.h″??

#define f(x)x*x-7*x+10 //一元函数f(X)=X??2-7X+10??

//函数功能是用黄金分割法实现求一元函数f(X)=X??2-7X+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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值