- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于VisualC的黄金分割法程序设计实验报告
新疆农业大学机械交通学院
实验报告
基于Visual C 的黄金分割法程序设计
一 、实验目的
1. 加深对机械优化设计方法的基本理论和算法步骤的理解;
2. 掌握最优化方法的基本概念、基本理论和基本方法,奠定最优化的理论基础;
3. 能够熟练编制和调试最优化方法的程序,奠定解决实际中的优化问题的基础;
二、实验设备和必备物品
安装有Microsoft Visual C++ 6.0的软件的计算机。
三、实验项目及要求
1、明确黄金分割法基本原理及适用范围;
2、以函数最小为目标,以为变量,变量,编写程序的流程图;
3、编制Visual C的黄金分割法的程序,并对所编制程序的结果进行校核。
四、实验内容
1、简述实验基本原理及适用范围;
在实际计算中,最常用的一维搜索试探方法是黄金分割法,又称作0.618法。金分割法德的基本思想是:在搜索区间内适当插入两点、,并计算其函数值。、将区间分成三段。应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。
黄金分割法是建立在区间消去法原理基础上的试探方法,该方法适用于在区间上的任何单谷函数求极小值问题。要求函数具有“单谷”特性外不作其它要求,甚至可以不连续。因此,这种方法的适应面相当广。
此外,黄金分割法对插入点的要求:
(1)要求插入点、 的位置相对于区间两端点具有对称性,即
(1)
式中为待定常数。
(2)黄金分割法还要求在保留下来的区间内再插入一点所形成的区间新三段,与原来区间的三段具有相同的比例分布。即每次缩小所得的新区间长度与缩小前区间长度之比(即:区间收缩率)为定值。
2、程序流程图
二次函数的黄金分割法程序流程图如图1所示。
图1 程序流程图
3、基于Visual C的程序清单及运行结果
(1)程序清单
#includestdio.h
#includemath.h
#define R 0.618
#define E 0.00001
void main()
{
float A,B,C,D,a,b;
float x1,x2,y1,y2;
double x,y;
printf(请输入次项系数 A\n);
scanf(%f,A);
printf(请输入次项系数B\n);
scanf(%f,B); printf(请输入C\n);
scanf(%f,C);
printf(请输入\n);
scanf(%f,D);
printf(请输入变量x的初始区间a\n);
scanf(%f,a);
printf(请输入变量x的初始区间b\n);
scanf(%f,b);
x1=(b-R*(b-a));
x2=(a+R*(b-a));
y1=A*x1*x1+B*x1+C;
y2=A*x2*x2+B*x2+C;
do
{
if(y1y2)
{
a=x1;
x1=x2;
x2=(a+R*(b-a));
y1=A*x1*x1*x1+B*x1*x1+C*x1+D;
y2=A*x2*x2*x2+B*x2*x2+C*x2+D;
}
else
{
b=x2;
x2=x1;
x1=(b-R*(b-a));
y1=A*x1*x1*x1+B*x1*x1+C*x1+D;
y2=A*x2*x2*x2+B*x2*x2+C*x2+D;
}
}while(sqrt(((y2-y1)/y2)*((y2-y1)/y2))E);
x=(0.5*(a+b));
y=(A*x*x*x+B*x*x+C*x+D);
printf(黄金分割法计算得到函数在定义区间内的最小值为%f\n,y);函数在变量的区间内的最小
文档评论(0)