实验报告黄金分割Word格式.docx
《实验报告黄金分割Word格式.docx》由会员分享,可在线阅读,更多相关《实验报告黄金分割Word格式.docx(9页珍藏版)》请在冰点文库上搜索。
容
实验目的:
1.掌握并能够建立最优化基本类型问题的数学模型。
2.掌握最优化方法的基本概念、基本理论和基本方法,奠定最优化的理论基础。
3.能够熟练编制和调试最优化方法的程序,奠定解决实际中的优化问题的基础
实验内容:
理解黄金分割法并编写相关程序求其最优解。
原
理
步
骤
、
实验原理:
实验步骤:
1,画流程图,编写程序;
2,将目标函数代入;
3,编译运行,将结果保存
结
果
分
析
**********黄金分割法计算结果**********
缩短次数aba
(1)a
(2)f1f2b-a
0,2.00000000,8.00000000,4.29200000,5.70800000,-1.62273600,2.62526400,6.00000000
1,2.00000000,5.70800000,3.41645600,4.29200000,-2.24302040,-1.62273600,3.70800000
2,2.00000000,4.29200000,2.87554400,3.41645600,-1.86005470,-2.24302040,2.29200000
3,2.87554400,4.29200000,3.41645600,3.75091381,-2.24302040,-2.18704226,1.41645600
4,2.87554400,3.75091381,3.20993527,3.41645600,-2.16586245,-2.24302040,0.87536981
5,3.20993527,3.75091381,3.41645600,3.54426001,-2.24302040,-2.24804105,0.54097854
6,3.41645600,3.75091381,3.54426001,3.62315093,-2.24804105,-2.23483385,0.33445781
7,3.41645600,3.62315093,3.49541346,3.54426001,-2.24997896,-2.24804105,0.20669493
8,3.41645600,3.54426001,3.46527713,3.49541346,-2.24879432,-2.24997896,0.12780401
9,3.46527713,3.54426001,3.49541346,3.51408855,-2.24997896,-2.24980151,0.07898288
10,3.46527713,3.51408855,3.48392309,3.49541346,-2.24974153,-2.24997896,0.04881142
11,3.48392309,3.51408855,3.49541346,3.50256534,-2.24997896,-2.24999342,0.03016546
12,3.49541346,3.51408855,3.50256534,3.50695466,-2.24999342,-2.24995163,0.01867509
13,3.49541346,3.50695466,3.49982220,3.50256534,-2.24999997,-2.24999342,0.01154120
14,3.49541346,3.50256534,3.49814548,3.49982220,-2.24999656,-2.24999997,0.00715188
15,3.49814548,3.50256534,3.49982220,3.50087696,-2.24999997,-2.24999923,0.00441986
16,3.49814548,3.50087696,3.49918890,3.49982220,-2.24999934,-2.24999997,0.00273148
17,3.49918890,3.50087696,3.49982220,3.50023212,-2.24999997,-2.24999995,0.00168805
18,3.49918890,3.50023212,3.49958741,3.49982220,-2.24999983,-2.24999997,0.00104322
19,3.49958741,3.50023212,3.49982220,3.49998584,-2.24999997,-2.25000000,0.00064471
20,3.49982220,3.50023212,3.49998584,3.50007553,-2.25000000,-2.24999999,0.00040992
21,3.49982220,3.50007553,3.49991897,3.49998584,-2.24999999,-2.25000000,0.00025333
22,3.49991897,3.50007553,3.49998584,3.50001573,-2.25000000,-2.25000000,0.00015656
23,3.49991897,3.50001573,3.49995593,3.49998584,-2.25000000,-2.25000000,0.00009675
24,3.49995593,3.50001573,3.49998584,3.49999288,-2.25000000,-2.25000000,0.00005979
25,3.49998584,3.50001573,3.49999288,3.50000431,-2.25000000,-2.25000000,0.00002988
26,3.49999288,3.50001573,3.50000431,3.50000700,-2.25000000,-2.25000000,0.00002284
27,3.49999288,3.50000700,3.49999828,3.50000431,-2.25000000,-2.25000000,0.00001412
28,3.49999288,3.50000431,3.49999725,3.49999828,-2.25000000,-2.25000000,0.00001143
29,3.49999725,3.50000431,3.49999828,3.50000161,-2.25000000,-2.25000000,0.00000706
30,3.49999828,3.50000431,3.50000161,3.50000201,-2.25000000,-2.25000000,0.00000603
31,3.49999828,3.50000201,3.49999970,3.50000161,-2.25000000,-2.25000000,0.00000373
32,3.49999828,3.50000161,3.49999955,3.49999970,-2.25000000,-2.25000000,0.00000334
33,3.49999955,3.50000161,3.49999970,3.50000083,-2.25000000,-2.25000000,0.00000206
34,3.49999955,3.50000083,3.50000004,3.49999970,-2.25000000,-2.25000000,0.00000127
35,3.49999955,3.49999970,3.49999961,3.50000004,-2.25000000,-2.25000000,0.00000015
*********************
黄金分割法最优点及目标函数值为:
x(*)=[3.4999996],f(*)=-2.2500000
迭代精度:
0.000000150
算法程序实现
/*csssqj.cpp*/
#include<
string.h>
stdio.h>
math.h>
stdlib.h>
time.h>
#defineN1/*优化设计维数*/
#defineEPSIN0.000001/*迭代精度*/
#defineH_QJ1.0/*初始区间搜索步长*/
FILE*fp;
charoutname[50]="
黄金分割法计算结果.txt"
;
/*计算结果输出文件*/
/*给出初始点坐标*/
voidcsd_x(doublex0[])
{
inti;
for(i=0;
i<
N;
i++)/*初始点为坐标原点的情况*/
x0[i]=0.0;
return;
}
/*目标函数*/
doublehanshu(doublex[])
doublef;
f=x[0]*x[0]-10.0*x[0]+36.0;
returnf;
/*计算f(xk+as)*/
doublexkadd(doublex[],doubled[],doublea)
doublex1[N];
i++)
x1[i]=x[i]+a*d[i];
returnhanshu(x1);
/*初始搜索区间的确定*/
voidcsssqj(doublex[],doubled[],doubleh,doubleab[])
doublea1,a2,a3,f1,f2,f3;
a2=0.0;
a3=a2+h;
f2=xkadd(x,d,a2);
f3=xkadd(x,d,a3);
if(f3>
f2)
{
a2=a3;
a3=0.0;
f1=f2;
f2=f3;
f3=f1;
h=-h;
}
do
a1=a2;
a3=a2+h;
f3=xkadd(x,d,a3);
h=2*h;
}while(f3<
f2);
if(h>
0.0)
ab[0]=a1;
ab[1]=a3;
else
ab[0]=a3;
ab[1]=a1;
/*黄金分割法*/
voidgoldcut(doublex[],doubled[],doubleh,doubleebsin)
doublea1,a2,f1,f2,a,b,ab[2];
inti,k=0;
fprintf(fp,"
**********黄金分割法计算结果**********\n\n"
);
缩短次数aba
(1)a
(2)"
f1f2b-a\n"
csssqj(x,d,h,ab);
a=ab[0];
b=ab[1];
a1=b-0.618*(b-a);
f1=xkadd(x,d,a1);
a2=a+0.618*(b-a);
%3d,%15.8lf,%15.8lf,%15.8lf,%15.8lf,%15.8lf,%15.8lf,%15.8lf\n"
k,a,b,a1,a2,f1,f2,b-a);
if(f1>
{
a=a1;
a1=a2;
f1=f2;
a2=a+0.618*(b-a);
f2=xkadd(x,d,a2);
}
else
b=a2;
a2=a1;
f2=f1;
a1=b-0.618*(b-a);
f1=xkadd(x,d,a1);
k++;
fprintf(fp,"
k,a,b,a1,a2,f1,f2,b-a);
}while(b-a>
ebsin);
x[i]+=(b+a)*d[i]/2;
\n*********************\n"
\n"
x(*)=["
N-1;
%15.7lf,"
x[i]);
%15.7lf],"
x[N-1]);
f1=hanshu(x);
f(*)=%15.7lf\n"
f1);
"
%15.9lf\n"
b-a);
main()
doublex0[N],h,ebsin,d[N];
csd_x(x0);
h=H_QJ;
ebsin=EPSIN;
d[0]=1.0;
fp=fopen(outname,"
w"
goldcut(x0,d,h,ebsin);
fclose(fp);
return0;
备注:
不交此报告者,本次实验为“不合格”。