现代设计方法

  • 格式:doc
  • 大小:547.28 KB
  • 文档页数:19

下载文档原格式

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

机械设计方法实验报告

姓名:

学号:

成绩:

指导教师:

进退试算法实验报告

一、实验目的

1.加深对进退试算法的基本理论和算法步骤的理解。

2.培养独立编制、调试计算机程序的能力。

3.掌握常用优化程序的使用方法。

4.培养灵活运用优化设计方法解决工程实际问题的能力。

二、实验要求

1.明确进退试算法基本原理及程序框图。

2.编制进退试算法程序。

三.实验内容

计算实例:用进退试算法求函数())2

t

f的搜索区间。

(+

=t t

①.进退试算法基本原理简述

进退试算法的基本思想是:按照一定的规律给出若干试算点,一次比较各试算点的函数值的大小,直到找出相邻的三点的函数值按“高——低——高”变化的单峰区间为止。

②、程序的流程图

③.编制进退试算法程序

#include

#include

#define f(t) (t*(t+2))

void sb(double *a,double *b)

{

double t0,t1,t,h,alpha,f0,f1;

int k=0;

printf("请输入初始点t0=");

scanf("%lf",&t0);

printf("\n请输入初始步长h=");

scanf("%lf",&h);

printf("\n请输入加步系数alpha(需大于1)=");

scanf("%lf",&alpha);

f0=f(t0);

t1=t0+h;

f1=f(t1);

while(1)

{

printf("\nf1=%lf,f2=%lf,t0=%lf,t=%lf,h=%lf,k=%d",f0,f1,t0,t1,h,k);

if(f1

{

h=alpha*h;

t=t0;

t0=t1;

f0=f1;

k++;

}

else

{

if(k==0)

{h=-h;t=t1;}

else

{

*a=t

*b=t>t1?t:t1;

break;

}

}

t1=t0+h;

f1=f(t1);

}

}

main()

{

double a=0,b=0;

double *c,*d;

c=&a,d=&b;

sb(c,d);

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

④.程序运行结果

鲍威尔共轭方向法实验报告

一、实验目的

5. 加深对鲍威尔法的基本理论和算法步骤的理解。

6. 培养独立编制、调试计算机程序的能力。

7. 掌握常用优化程序的使用方法。

8. 培养灵活运用优化设计方法解决工程实际问题的能力。

二、实验要求

3. 明确鲍威尔法基本原理及程序框图。

4. 编制鲍威尔法程序。

三.实验内容

计算实例:用鲍威尔法求函数()212

221212141060,x x x x x x x x f -++--=的极

小值。

①.鲍威尔法基本原理简述

任选一初始点X 0,再选两个线性无关的向量。从X 0出发,顺

次沿e 1、e 2作一维搜索得01X 、02X ,两点连线得一新方向d 1,用d

1代替e 1形成两个线性无关向量e 2、d 1,作为下一轮搜索方向。再从02

X 出发,沿d 1作一维搜索得点01X ,作为下一轮迭代的初始点。从X 1出发,顺次沿e 2、d 1作一维搜索,得到点11X 、12X ,两点的连线得一新方向d 2。10X 、12X 两点是从不同点X 0、11X 出发,分别沿d 1方向进

行一维搜索而得到的极小点。再从12X 出发,沿d 2作一维搜索得点X 2,即是二维问题的极小点X *。

③.编制鲍威尔法程序

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

double objf(double x[])

{double ff;

ff=60-10*x[0]-4*x[1]+x[0]*x[0]+x[1]*x[1]-x[0]*x[1];

return(ff);

}

void jtf(double x0[],double h0,double s[],int n,double a[],double b[]) {int i;

double *x[3],h,f1,f2,f3;

for(i=0;i<3;i++)

x[i]=(double *)malloc(n*sizeof(double));

h=h0;

for(i=0;i

*(x[0]+i)=x0[i];

f1=objf(x[0]);

for(i=0;i

*(x[1]+i)=*(x[0]+i)+h*s[i];

f2=objf(x[1]);

if(f2>=f1)

{ h=-h0;

for(i=0;i

*(x[2]+i)=*(x[0]+i);

f3=f1;

for(i=0;i

{*(x[0]+i)=*(x[1]+i);

*(x[1]+i)=*(x[2]+i);

}

f1=f2;

f2=f3;

}

for(;;)

{h=2*h;

for(i=0;i

*(x[2]+i)=*(x[1]+i)+h*s[i];

f3=objf(x[2]);

if(f2

else

{ for(i=0;i

{*(x[0]+i)=*(x[1]+i);

*(x[1]+i)=*(x[2]+i);