机械优化设计作业

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

合肥工业大学

《机械优化设计》课程实践研究报告

班级:机设12-6班

学号: 2012216281

姓名:丁雷鸣

授课老师:王卫荣

日期: 2015年 11月 10 日

目录

一、 =0.618的证明 (1)

二、一维搜索程序作业 (1)

(1)例1程序文本 (1)

(2)例1输出结果截图 (2)

(1)例2程序文本 (2)

(2)例2输出结果截图 (3)

三、单位矩阵程序作业 (4)

(1)程序文本 (4)

(2)输出结果截图 (4)

四、连杆机构问题 (6)

(1)目标函数 (6)

(2)约束条件 (7)

(3)选择方法 (7)

(4)程序文本 (7)

(5)数据输入截图 (8)

(6)输出结果 (9)

五、自行选择小型机械设计问题或其他工程优化问题 (10)

(1)设计变量 (10)

(2)目标函数 (10)

(3)约束条件 (10)

(4)程序文本 (10)

(5)数据输入截图 (11)

(6)输出数据 (11)

六、机械优化设计课程实践心得体会 (13)

一、λ=0.618的证明

在实际计算中,最常用的一维搜索方法是黄金分割法。黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间[]b a ,内适当插入两点

α1

,α

2

。并且计算其函数值。

黄金分割法要求插入点

α1

,α2

的位置相对于区间[]b a ,两端点具有对称性,即)(1

a b b --=λα、)(2

a b a -+=λα、其中λ为待定常数。

除对称要求外,黄金分割法还要求保留下来的区间内再再插入一点,所形成的区间新三段与原来的区间三段具有相同的比例分布。设原区间[]b a ,长度为1,保留下来的区间

[]α2

,a 长度为λ,区间缩短率为λ。为了保持想相同的比例分布,新插入点α

3

应该在

)1(λλ-位置上,α1在原区间的1-λ位置应该相当于在保留区间的λ2

位置。故有

λλ2

1=-

012

=-+λ

λ

取方程正数解,得

618.02

1

5≈-=λ 二、一维搜索程序作业

例1、a=0,b=π2,f(x)=cosx (1)例1程序文本

#include include void main ()

{float A,B,C=0.618,aa[3],y[3],D; scanf(“%f,%f,%f ”,&A,&B,&D): aa[1]=B-C*(B-A); aa[2]=A+C*(B-A); y[1]=cos(aa[1]); y[2]=cos(aa[2]); do{if (y[1]>y[2])

{A=aa[1];aa[1]=aa[2];y[1]=y[2]; aa[2]=A+C*(B-A); }

Else

{B=aa[2];aa[2]=aa[1];y[2]=y[1];

aa[1]=B-C*(B-A);

y[1]=cos(aa[1]);

}

}

While(fabs(B-A)/B>D);

aa[0]=(A+B)/2;

y[0]=cos(aa[0]);

printf(“A=%f\n”,aa[0]);

printf(“y=%f\n”,y[0]);

}

(2)例1输出结果截图:

输入a=0,b=2 ,精度d=0.000001,输出极小值点和函数极小值如下:

例2、a=0,b=10,f(x)=(x-2)2+3

(3)例2、程序文本

#include

#include

void main()

{ float a,b,c=0.618,aa[3],y[3],d;

scanf("%f,%f,%f",&a,&b,&d);

aa[1]=b-c*(b-a);

aa[2]=a+c*(b-a);

y[1]=(aa[1]-2)*(aa[1]-2)+3;

y[2]=(aa[2]-2)*(aa[2]-2)+3;

do{ if(y[1]>y[2])

{ a=aa[1];aa[1]=aa[2];y[1]=y[2];

aa[2]=a+c*(b-a);

y[2]=(aa[2]-2)*(aa[2]-2)+3;

}

else

{ b=aa[2];aa[2]=aa[1];y[2]=y[1];

aa[1]=b-c*(b-a);

y[1]=(aa[1]-2)*(aa[1]-2)+3;

}

}while(fabs((b-a)/b)>d);

aa[0]=(a+b)/2;

y[0]=(aa[0]-2)*(aa[0]-2)+3;

printf("a*=%f\n",aa[0]);

printf("y=%f\n",y[0]);

}

(4)例2输出结果截图:

输入a=0,b=10,精度d=0.000001,输入极小值点和函数极小值如下:

三、单位矩阵程序作业

作业:编写生成单位矩阵的程序。

要求:通用、输出美观、语言少为佳。(1)程序文本

#include

void main (void)

#define m 500

{

int i,j,n,a[m][m];

printf("please input a number");

scanf("%d",&n);

for(i=1;i<=n;i++)

{ for(j=1;j<=n;j++)

{

if(i==j)

a[i][j]=1;

else

a[i][j]=0;

printf("%d",a[i][j]);

}

printf("\n");

}

}

(2)输出结果截图:

当n=4时,输出结果如下:

相关文档
最新文档