机械优化设计一维搜索实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《机械优化设计》

实验报告

班级: 机械设计(2)班

姓名:邓传淮

学号:0901102008

1 实验名称:一维搜索黄金分割法求最佳步长

2 实验目的:通过上机编程,理解一维搜索黄金分割法的原理,了解计算机在优化设计中的应用。

3 黄金分割法的基本原理

黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点α*的一种方法。它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低。其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。具体步骤是:在区间[a,b]内取点:a1 ,a2 把[a,b]分为三段。如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)

4实验所编程序框图

(1)进退发确定单峰区间的计算框图

(2)黄金分割法计算框图

5 程序源代码

(1)进退发确定单峰区间的程序源代码

#include

#include

#define f(x) pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main()

{

int k;

double x,h,x1,x2,x3;

double f1,f2,f3,f;

double a,b;

x1=0;

h=1;

x2=x1+h;

f1=f(x1);

f2=f(x2);

if (f1>f2)

{

h=2*h;

x3=x2+h;

f3=f(x3);

}

else

{

h=-h;

x1=x2;

f1=f2;

x3=x2+h;

f3=f(x3);

}

printf("x1=%lf,x2=%lf\0",x1,x2);

do

{

x1=x2;

x2=x3;

f1=f2;

f2=f3;

x3=x2+h;

f3=f(x3);

}while(f3

if (h>0)

{

a=x1;

b=x3;

}

else

{

a=x3;

b=x1;

}

printf("a=%lf,b=%lf\n",a,b);

}

(2)黄金分割法的程序源代码

#include

#include

#define f(x)=pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main()

{

int k;

double x,h,x1,x2,x3,c;

double f1,f2,f3,f;

double a,b;

printf("input c:\n");

scanf("%lf",&c);

a=1;

b=5;

x1=b-0.618*(b-a);printf("x1=%lf ",x1);

f1=f(x1);printf("f1=%lf ",f1);

x2=a+0.618*(b-a);printf("x2=%lf ",x2);

f2=f(x2);printf("f2=%lf ",f2);

k=0;

loop:

{

if(f1

{

b=x2;printf("b=%lf ",b);

x2=x1;printf("x2=%lf ",x2);

f2=f1;printf("f2=%lf ",f2);

x1=a+0.382*(b-a);printf("x1=%lf ",x1);

f1=f(x1);printf("f1=%lf ",f1);

}

else

{

a=x1;printf("a=%lf ",a);

x1=x2;printf("x1=%lf ",x1);

f1=f2;printf("f1=%lf ",f1);

x2=a+0.618*(b-a);printf("x2=%lf ",x2);

f2=f(x2);printf("f2=%lf ",f2);

}

k=k+1;

printf("k=%d\n",k);

}

if(fabs(b-a

{

x=0.5*(b+a);printf("x=%lf ",x);

f=f(x);printf("f=%lf ",f);

}

else

{

goto loop;

}

getchar();

}

6 程序运行截图

相关文档
最新文档