最优化实验报告Word文件下载.docx
- 文档编号:18092597
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:22
- 大小:634.70KB
最优化实验报告Word文件下载.docx
《最优化实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《最优化实验报告Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
项目二一维搜索算法
(二)
编写黄金分割法、抛物线插值法的程序。
1.掌握黄金分割法的思想及迭代步骤;
2.掌握抛物线插值法的思想及迭代步骤。
编程解决以下问题:
1.用黄金分割法求解
2.用抛物线插值法求解
项目三常用无约束最优化方法
(一)
编写最速下降法、Newton法(修正Newton法)的程序。
1.掌握最速下降法的思想及迭代步骤。
2.掌握Newton法的思想及迭代步骤;
3.掌握修正Newton法的思想及迭代步骤。
[实验内容及步骤]
1.用最速下降法求
2.用Newton法求
初始点
3.用修正Newton求
项目四常用无约束最优化方法
(二)
编写共轭梯度法、变尺度法(DFP法和BFGS法)程序。
[实验学时]2学时
1.掌握共轭方向法的思路及迭代过程;
2.掌握共轭梯度法的思想及迭代步骤;
3.掌握DFP法和BFGS法的思想及迭代步骤。
1.用共轭梯度法求得
,取初始点
2.用共轭梯度法求
,自定初始点,
3.用DFP法求
,初始点
项目五常用约束最优化方法
编写外点罚函数法、外点罚函数法的程序。
1.掌握外点罚函数法的思想及迭代步骤;
2.掌握内点罚函数法的思想及迭代步骤。
1.用外点罚函数法编程计算
精度
2.用内点罚函数法编程计算
初始点取为
,初始障碍因子取
,缩小系数取
二、实验主要步骤
首先用VC为每一个项目新建一个工程,再新建一个c++源文件
再把有关头文件包含进去,有关头文件的定义:
#include<
iostream.h>
stdio.h>
math.h>
三、程序清单
项目一
(1)//函数f(t)=t^3-2t+1
doublef1(doublet){
doubley;
y=t*t*t-2*t+1;
returny;
}
//加步探索法
doublejiabu(doublet,doubleh,doublee){
doublet0,
t1,y;
t0=t;
do{
t1=t0+h;
if(f1(t1)<
f1(t0)){t0=t1;
h=2*h;
else{
if(fabs(h)<
e)
{y=t0;
break;
h=-0.25*h;
}while
(1);
//主函数
voidmain(){doublet,h,e;
cout<
<
"
请输入初始点t:
;
cin>
>
t;
请输入步长h:
h;
请输入精确度e:
cin>
e;
doublex=jiabu(t,h,e);
极小点为:
x="
x<
endl<
minf(t)="
f1(x)<
endl;
(2)
//函数f(t)=t(t+2)的导函数
doublef2(doublet){
y=2*t+2;
//对分法
doubleduifen(doublea,doubleb,doublee){
doublex0=0.5*(a+b);
if(f2(x0)>
0){
b=x0;
x0=(a+b)*0.5;
else{a=x0;
}while(fabs(a-b)>
=e);
returnx0;
voidmain(){
doublea,b,e;
请输入区间:
a>
b;
请输入精确度:
doublet=duifen(a,b,e);
t<
t*(t+2)<
}
(3)
//函数f(t)=t^3-2t+1的一阶导函数
doublef3(doublet){
return3*t*t-2;
//函数f(t)=t^3-2t+1的二阶导函数
doublef4(doublet){
return6*t;
//Newton法
doubleNewton(doublex,doublee){
doublex0=x,x1;
x1=x0-f3(x0)/f4(x0);
x0=x1;
}while(fabs(f3(x0))>
Voidmain(){doublet,e;
doublex=Newton(t,e);
}
项目二
(1)
/函数f(t)=t(t+2)
y=t*(t+2);
//黄金分割法
doublegold(doublea,doubleb,doublee){
doublem1,m2;
m1=a+0.382*(b-a);
m2=a+0.618*(b-a);
while((b-a)>
=e){
if(f1(m1)>
f1(m2)){
a=m1;
m1=m2;
m2=a+0.618*(b-a);
b=m2;
m2=m1;
}}
return0.5*(b+a);
intmain(){
doublet=gold(a,b,e);
极小点为x="
//函数f(x)=8x^3-2x^2-7x+3
doublef2(doublex){
return8*x*x*x-2*x*x-7*x+3;
//抛物线插值法
doublepaowuxian(doublex0,doublex1,doublex2){
doubley
y=0.5*(x1+x0-((f2(x1)-f2(x0))*(x2-x1))/((x1-x0)*(f2(x2)-f2(x1))));
Voidmain(){
doublea,b,c;
请输入3个插入节点的值(初始区间为[0,2]):
b>
c;
doublex=paowuxian(a,b,c);
极小点为x=:
minf(x)="
f2(x)<
项目三
(1)
//最速下降法
voidxiajiang(double&
x1,double&
x2,doublee){
doublea;
while(sqrt(4*x1*x1+2500*x2*x2)>
a=(x1*x1+625*x2*x2)/((2*x1*x1+31250*x2*x2));
x1=x1-2*a*x1;
x2=x2-50*a*x2;
}
Voidmain(){doublex1,x2,e;
请输入初始点(x1,x2):
x1>
x2;
xiajiang(x1,x2,e);
("
x1<
"
x2<
)"
x1*x1+25*x2*x2<
voidNewton(double&
while(sqrt((-10+2*x1-x2)*(-10+2*x1-x2)+(-4+2*x2-x1)*(-4+2*x2-x1))>
x1=x1-(-8+x1);
x2=x2-(-6+x2);
doublex1,x2,e;
cout<
Newton(x1,x2,e);
60-10*x1-4*x2+x1*x1+x2*x2-x1*x2<
(3)
//修改后的Newton法
voidCnewton(float&
x1,float&
x2,floate){
while(sqrt((8*x1+9)*(8*x1+9)+(4*x2-3)*(4*x2-3))>
=e)
x1=x1-(x1+9/8.0);
x2=x2-(x2-3/4.0);
floatx1,x2,e;
Cnewton(x1,x2,e);
4*(x1+1)*(x1+1)+2*(x2-1)*(x2-1)+x1+x2+10<
项目四
//共轭梯度法算min(x1^2+4x2^2)
voidTidu1(double&
a,double&
b,doublee){
intk=0;
doubleg=4*a*a+8*b*b;
doubles=-2*a,q=-8*b;
again1:
doublem=-(s*a+4*q*b)/(s*s+4*q*q);
a=a+s*m;
b=b+q*m;
doubleg1=4*a*a+8*b*b;
if(sqrt(g1)<
e)return;
else{
if(k<
1){
doublen=g1/g;
s=-2*a+n*s;
q=-8*b+n*q;
k=k+1;
gotoagain1;
elseTidu1(a,b,e);
}}
Tidu1(x1,x2,e);
极小点为x=("
x1*x1+4*x2*x2<
//共轭梯度法算minf(x)=2x1^2+x2^2-x1*x2
voidTidu2(double&
doubleg=(4*a-b)*(4*a-b)+(2*b-a)*(2*b-a);
doubles=b-4*a,q=a-2*b;
again2:
doublem=(a*q+s*b-4*a*s-2*b*q)/(4*s*s+2*q*q-2*s*q);
a=a+s*m;
doubleg1=(4*a-b)*(4*a-b)+(2*b-a)*(2*b-a);
s=b-4*a+n*s;
q=a-2*b+n*q;
gotoagain2;
}elseTidu2(a,b,e);
Tidu2(x1,x2,e);
2*x1*x1+x2*x2-x1*x2<
//DEP法
voidDEP(double&
doubles=40-8*a,q=12-2*b;
again:
doublem=(6*q+20*s-b*q)/(4*s*s+q*q);
doublea1=a+m*s,b1=b+m*q;
doubleg=(8*a1-40)*(8*a1-40)+(2*b-12)*(2*b-12);
if(sqrt(g)<
e){
a=a1;
b=b1;
return;
else{if(k<
doublex=a1-a,y=b1-b;
doublec=8*(a1-a),d=2*(b1-b);
doubleh1=1+x*x/(x*c+y*d)-c*c/(c*c+d*d);
doubleh2=x*y/(x*c+y*d)+c*d/(c*c+d*d);
doubleh3=h2;
doubleh4=1+y*y/(x*c+y*d)-d*d/(c*c+d*d);
doubleg1=8*a1-40,g2=2*b1-12;
s=-h1*g1-h2*g2;
q=-h3*g1-h4*g2;
gotoagain;
}elseDEP(a1,b1,e);
DEP(x1,x2,e);
4*(x1-5)*(x1-5)+(x2-6)*(x2-6)<
项目五
voidwaidian(double&
intM=4;
a=1/2*M;
b=M/(M-1);
M=100*M;
}while(fabs(a+b-1)>
waidian(x1,x2,e);
-x1+x2<
voidneidian(double&
doubleu1=10;
doublec=0.1;
a=(1+sqrt(1+2*u1))/2;
b=u1;
u1=u1*c;
}while(a-1>
=e&
&
neidian(x1,x2,e);
((x1+1)*(x1+1)*(x1+1))/3+x2<
四、实验结果
上课纪律(20%)
实验过程及结果(40%)
实验报告质量(40%)
教师评语:
总分:
教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 实验 报告