(课程实践报告封面模版)
合肥工业大学
《机械优化设计》课程实践
研究报告
班级:机设六班
学号: 20100581
姓名:李继鑫
授课老师:王卫荣
日期: 2013年 5 月 7 日
(一)一维搜索 min f(x)=]10,0[]2,0[]32)2[(*cos *π???+-x d x c 注:其中c 、d 为待定系数,用于确定选择的函数是哪一个。 C 语言程序段如下:
#include
#include
#define p 3.14
float fun(float x,float c,float d);
void main(void)
{
float a0,a1,a2,r,a,b;
float y1=0.0000,y2=0.0000,u;
float c,d;
u=0.618;
printf("input[a,b]and r:a= b= r= ");
scanf("%f%f%f",&a,&b,&r);
printf("choose only ONE function number c=1 0 or d=0 1\n"); scanf("%f%f",&c,&d);
if(c==1) d=0;
else c=0,d=1;
a1=b-u*(b-a),y1=fun(a1,c,d);
a2=a+u*(b-a),y2=fun(a2,c,d);
do
{
if(y1>=y2)
{
a=a1;
a1=a2,y1=y2;
a2=a+u*(b-a),y2=fun(a2,c,d);
}
else
{
b=a2;
a2=a1,y2=y1;
a1=b-u*(b-a),y1=fun(a1,c,d);
}
}while(fabs((b-a)/b)>r && fabs((y2-y1)/y2)>r); a0=0.5*(a+b);
printf("The best result a0=%f\n",a0);
}
/******function editting********/
float fun(float x,float c,float d)
{
float Y;
Y=c*cos(x)+d*((x-2)*(x-2)+3);
return(Y);
}
●选择第二的函数(0,1)极小值a0=2.000970,理论值为2,正确。
●选择第一的函数(1,0)极小值a0=3.140134,理论值为 ,正确。
(二)单位矩阵
C语言程序实现n阶单位矩阵如下:
#include
void main(void)
{
int n,i,j;
int d=1,c=0;
printf("Input the dimension of array n=\n");
scanf("%d",&n);
printf("the array of n*n is:\n");
for(i=0;i { for(j=0;j { if(i==j) printf("%3d",d); else printf("%3d",c); } printf("\n"); } } ●实验数据验证如下,取n=5得到5阶单位矩阵: ●取n=10得到10阶单位矩阵: (三)连杆机构问题优化设计 修改程序实现过程如下: unit sumt_fgh; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Math; type arr3 = array[1..55]of real; type TForm3 = class(TForm) private { Private declarations } public { Public declarations } end; var Form3: TForm3; Procedure ffx; Procedure ggx; Procedure hhx; implementation uses sumt_1, sumt_2; {$R *.DFM} // 应用惩罚函数法优化方法计算优化问题,用户应首先根据具体问题 // 建立其优化的数学模型(①目标函数;②不等式约束函数;③等式约束函数。);// min F[x] // s.t. GX[j]≤0 (j=1,2,...kg) // HX[j]=0 (j=1,2,...kh) // 再将目标函数、约束函数按DELPHI语言改写成表达式, // fx := ...; // gx[1] := ...; // gx[2] := ...; // . // . // gx[kg] := ...; // hx[1] := ...; // hx[2] := ...; // . // . // hx[kh] := ...; // 替换下面的procedure ffx段中的目标函数的计算表达式fx; // 替换下面的procedure ggx段中的目标函数的计算表达式gx[1]、gx[2]...gx[kg] // 替换下面的procedure hhx段中的目标函数的计算表达式hx[1]、hx[2]...hx[kh]} procedure ffx; //目标函数 var y0,y1,z,t,b,a,y2 : double; var i :integer; begin with form1.sumt do begin fx:=0; for i:= 1 to 30 do begin y0:=arccos(((1+x[1])*(1+x[1])-x[2]*x[2]+25)/(10*(1+x[1]))); y1:=y0+(i+1)*i*0.5; z:=arccos(((1+x[1])*(1+x[1])-x[2]*x[2]-25)/(10*x[2])); r:=sqrt(26-10*cos(y1)); t:=z+2*(y1-y0)/3.0/3.14; b:=arccos((r*r+24)/(10*r)); y2:=3.14-a-b; a:=arccos((r*r+x[2]*x[2]-x[1]*x[1])/(2*r*x[2])); fx:=fx+(y2-t)*(y2-t)*3.14/60.0; end; end; end; procedure ggx; //约束函数 begin with form1.sumt do begin gx[1]:=x[1]*x[1]+x[2]*x[2]-1.414*x[1]*x[2]-16.0; gx[2]:=36.0-x[1]*x[1]-x[2]*x[2]-1.414*x[1]*x[2]; gx[3]:=-x[1]; gx[4]:=-x[2]; gx[5]:=6-x[1]-x[2]; gx[6]:=x[1]-x[2]-4; gx[7]:=x[2]-x[1]-4; end; end; procedure hhx; //约束函数 begin with form1.sumt do begin hx[1]:=x[1]; end; end; End. ●参数数输入窗口: ●连杆问题存档资料: 常用优化方法——惩罚函数法 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 一、初始数据 ====================================================================== ========= 设计变量个数N = 2 ----------------------------------------------------------------------------- 不等式约束个数KG = 7 等式约束个数KH = 0 ----------------------------------------------------------------------------- 惩罚因子R = 4.41942089203984 惩罚因子降低系数 C = 0.2 ----------------------------------------------------------------------------- 初始步长T0 = 0.01 收敛精度EPS = 0.0001 ----------------------------------------------------------------------------- 无约束优化方法: ----------------------------------------------------------------------------- 设计变量初始点X0: X[1]=4 X[2]=4 ----------------------------------------------------------------------------- 设计变量下界BL: BL[1]=0 BL[2]=0 ----------------------------------------------------------------------------- 设计变量上界BU: BU[1]=10 BU[2]=10 ----------------------------------------------------------------------------- 初始点目标函数值F(X0)= 3355.25624403039 ----------------------------------------------------------------------------- 初始点处的不等约束函数值G(X0): GX[1]= -6.624000E+00 GX[2]= -1.862400E+01 GX[3]= -4.000000E+00 GX[4]= -4.000000E+00 GX[5]= -2.000000E+00 GX[6]= -4.000000E+00 GX[7]= -4.000000E+00 ------------------------------------------------------------------------------- 二、计算过程__数据 ====================================================================== ========= IRC = 0 R = 4.419421E+00 PEN = 3362.83720242824 ----------------------------------------------------------------------------- IRC = 1 R = 8.114894E-01 PEN = 3332.21039499842 ----------------------------------------------------------------------------- 三、优化结果__数据 ====================================================================== ========= 罚函数构造次数IRC = 2 ----------------------------------------------------------------------------- 无约束优化方法调用次数ITE = 5 一维搜索方法调用次数ILI = 11 ----------------------------------------------------------------------------- 惩罚函数值计算次数NPE = 76 目标函数值计算次数IFX = 0 ----------------------------------------------------------------------------- 设计变量最优点X*: X[1]= 4.868133E+00 X[2]= 1.650658E+00 ----------------------------------------------------------------------------- 最优值F(X*)= 3308.87943922349 ----------------------------------------------------------------------------- 最优点处的不等约束函数值G(X*): GX[1]= -9.389790E-01 GX[2]= -1.785757E+00 GX[3]= -4.868133E+00 GX[4]= -1.650658E+00 GX[5]= -5.187906E-01 GX[6]= -7.825248E-01 GX[7]= -7.217475E+00 ------------------------------------------------------------------------------- --- STOP --- (四)自选工程问题 例6-7 试求点集A (x 1,x 2,x 3)和点集B (x 4,x 5,x 6)之间的最短距离。限制条件(改动) X 12+x 22 +x 32≤4 (x 4_3)2+x 5 2≤1 4≤x6≤8 题毕 建立数学模型minf (x )=(x 1-x 4)2+(x 2-x 5)2+(x 3-x 6) 2 S.t. g1(x)=x 12+x 22+x 32-4≤0 g2(x)= (x 4_ 3)2+x 52-0.64≤0 g3(x)=x 6-8≤0 g4(x)=4-x 6≤0 Delphi 语言的惩罚函数实现过程如下: 常用优化方法——惩罚函数法 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 一、初始数据 =============================================================================== 设计变量个数 N = 6 ----------------------------------------------------------------------------- 不等式约束个数 KG = 4 等式约束个数 KH = 0 ----------------------------------------------------------------------------- 惩罚因子 R = 1 惩罚因子降低系数 C = 0.2 ----------------------------------------------------------------------------- 初始步长 T0 = 0.01 收敛精度 EPS = 0.001 ----------------------------------------------------------------------------- 无约束优化方法: ----------------------------------------------------------------------------- 设计变量初始点 X0: X[1]=1 X[2]=1 X[3]=1 X[4]=3 X[5]=0.7 X[6]=7 ----------------------------------------------------------------------------- 设计变量下界BL: BL[1]=-100 BL[2]=-100 BL[3]=-100 BL[4]=-100 BL[5]=-100 BL[6]=-100 ----------------------------------------------------------------------------- 设计变量上界BU: BU[1]=100 BU[2]=100 BU[3]=100 BU[4]=100 BU[5]=100 BU[6]=100 ----------------------------------------------------------------------------- 初始点目标函数值F(X0)= 40.09 ----------------------------------------------------------------------------- 初始点处的不等约束函数值G(X0): GX[1]= -1.000000E+00 GX[2]= -1.500000E-01 GX[3]= -1.000000E+00 GX[4]= -3.000000E+00 ------------------------------------------------------------------------------- 二、计算过程__数据 ====================================================================== ========= IRC = 0 R = 1.000000E+00 PEN = 49.09 ----------------------------------------------------------------------------- IRC = 1 R = 2.000000E-01 PEN = 18.6748713054182 ----------------------------------------------------------------------------- IRC = 2 R = 4.000000E-02 PEN = 11.1881630924976 ----------------------------------------------------------------------------- IRC = 3 R = 8.000000E-03 PEN = 8.78866588701082 ----------------------------------------------------------------------------- IRC = 4 R = 1.600000E-03 PEN = 7.76901746798554 ----------------------------------------------------------------------------- IRC = 5 R = 3.200000E-04 PEN = 7.33007787175112 ----------------------------------------------------------------------------- IRC = 6 R = 6.400000E-05 PEN = 7.14793735472187 ----------------------------------------------------------------------------- IRC = 7 R = 1.280000E-05 PEN = 7.0620591272465 ----------------------------------------------------------------------------- IRC = 8 R = 2.560000E-06 PEN = 7.02128235779726 ----------------------------------------------------------------------------- 三、优化结果__数据 ====================================================================== ========= 罚函数构造次数IRC = 9 ----------------------------------------------------------------------------- 无约束优化方法调用次数ITE = 9 一维搜索方法调用次数ILI = 54 ----------------------------------------------------------------------------- 惩罚函数值计算次数NPE = 262 目标函数值计算次数IFX = 0 ----------------------------------------------------------------------------- 设计变量最优点X*: X[1]= 1.311487E+00 X[2]= 8.433797E-06 X[3]= 1.509287E+00 X[4]= 2.200969E+00 X[5]= 3.394259E-06 X[6]= 4.000524E+00 ----------------------------------------------------------------------------- 最优值F(X*)= 6.99743732000065 ----------------------------------------------------------------------------- 最优点处的不等约束函数值G(X*): GX[1]= -2.053107E-03 GX[2]= -1.549393E-03 GX[3]= -3.999476E+00 GX[4]= -5.238987E-04 ------------------------------------------------------------------------------- --- STOP --- (五)感悟与心得 机械优化设计这门课乍学感觉就是一些列的数学,当然兴趣也不是很高,上课时老师所讲的更是没有深入进去听,理解方面也是不到位,对优化设计的理解仅仅限于单纯的数学问题。 然而,邻近的考试使我全面认真的研究机械优化设计这本书中的精髓,什么一维搜索的黄金分割,二次插值,最速下降法的牛顿法,共轭方向法的共轭梯度法,也有不依据导数值信息搜素最优点的复合形法,随机方向法,最具有吸引力字眼的就数惩罚函数啦! 王老师在第一节课就布置了一道四连杆问题,当时提出惩罚函数法,觉得什么都不懂,惩罚?咋惩罚?再学了惩罚函数的思想后知道是大概怎么回事,在报告中的机构四连杆问题就选中这个优化问题来研究。不过,就能力来书,让我独编写整段语言,我是做不到的,还好老师给我们了模板,按照help文件的提示,自己研究和百度,摸索了程序编制目标函数ffx。 以上,稍微一处不起眼的错误都导致整体的失败,可见在程序编写中要真正做到误差为零的要求,对于只学了c语言的我面对新的语言delphi,觉得更具方便性,但在一些语法如for循环中基本格式有几分相像之处,理解上稍微好一点。 通过各种问题优化方法的课堂学习,让自己知道面对一个实际的工程问题时只要知道方法的程序框图,就可以试着将其实现程序化,运用计算机的强大计算功能实现目标优化。我想这门课对于以后自己解决问题的能力是一次启蒙,同时也要求我注意将课本知识实践化, 才能真正体会到所学的东西值钱!!! 谢谢王老师! 完