最优化实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《最优化方法及其应用》
课 程 实 验 报 告
一、 实验内容
项目一 一维搜索算法(一) [实验目的]
编写加步探索法、对分法、Newton 法的程序。
[实验学时]
2学时
[实验准备]
1.掌握一维收搜索中搜索区间的加步探索法的思想及迭代步骤;
2.掌握对分法的思想及迭代步骤;
3.掌握Newton 法的思想及迭代步骤。
[实验内容及步骤]
编程解决以下问题:
1.用加步探索法确定一维最优化问题
12)(min 30+-=≥t t t t ϕ
的搜索区间,要求选取2,1,000===αh t .
2.用对分法求解
)2()(min +=t t t ϕ,
已知初始单谷区间]5,3[],[-=b a ,要求按精度3.0=ε,001.0=ε分别计算.
3.用Newton 法求解
12)(min 3+-=t t t ϕ,
已知初始单谷区间]1,0[],[=b a ,要求精度01.0=ε.
项目二 一维搜索算法(二)
[实验目的]
编写黄金分割法、抛物线插值法的程序。
[实验学时]
2学时
[实验准备]
1.掌握黄金分割法的思想及迭代步骤;
2.掌握抛物线插值法的思想及迭代步骤。
[实验内容及步骤]
编程解决以下问题:
1.用黄金分割法求解
)2()(min +=t t t ϕ,
已知初始单谷区间]5,3[],[-=b a ,要求精度001.0=ε.
2.用抛物线插值法求解
3728)(min 23+--=x x x x f ,
已知初始单谷区间001.0]20[][==ε,,,
b a .
项目三 常用无约束最优化方法(一)
[实验目的]
编写最速下降法、Newton 法(修正Newton 法)的程序。
[实验学时]
2学时
[实验准备]
1.掌握最速下降法的思想及迭代步骤。
2.掌握Newton 法的思想及迭代步骤;
3.掌握修正Newton 法的思想及迭代步骤。
[实验内容及步骤]
编程解决以下问题:
1.用最速下降法求
22120min ()25[22]0.01T f X x x X ε=+==,,,.
2.用Newton 法求
22121212min ()60104f X x x x x x x =--++-,
初始点
0[00]0.01T X ε==,,. 3.用修正Newton 求
221212min ()4(1)2(1)10f X x x x x =++-+++,
初始点
0[00]0.01T X ε==,,.
项目四 常用无约束最优化方法(二)
[实验目的]
编写共轭梯度法、变尺度法(DFP 法和BFGS 法)程序。
[实验学时] 2学时
[实验准备]
1.掌握共轭方向法的思路及迭代过程;
2.掌握共轭梯度法的思想及迭代步骤;
3.掌握DFP 法和BFGS 法的思想及迭代步骤。
[实验内容及步骤]
编程解决以下问题:
1.用共轭梯度法求得)4min(2221x x +,取初始点T X ]11[0,=,01.0=ε.
2.用共轭梯度法求
221212min ()2f X x x x x =+-,自定初始点,01.0=ε. 3.用DFP 法求2212min ()4(5)(6)f X x x =-+-,初始点
01.0]98[0==ε,,T X . 项目五 常用约束最优化方法
[实验目的]
编写外点罚函数法、外点罚函数法的程序。
[实验学时]
2学时
[实验准备]
1.掌握外点罚函数法的思想及迭代步骤;
2.掌握内点罚函数法的思想及迭代步骤。
[实验内容及步骤]
编程解决以下问题:
1.用外点罚函数法编程计算
⎩⎨⎧=-+=≥=+-=,,,
01)(0ln )(..)(min 2112121x x X h x X g t s x x X f
精度5
10-=ε.
2.用内点罚函数法编程计算 ⎩⎨⎧≥≥-⎥⎦
⎤⎢⎣⎡++.,,001..)1(31min 21231x x t s x x
初始点取为T X ]43[0,=,初始障碍因子取101=u ,缩小系数取1.0=c .
二、 实验主要步骤
首先用VC 为每一个项目新建一个工程,再新建一个c++源文件 再把有关头文件包含进去,有关头文件的定义 :
#include
#include
#include
三、程序清单
项目一
(1)//函数f(t)=t^3-2t+1
double f1(double t){
double y;
y=t*t*t-2*t+1;
return y;
}
//加步探索法
double jiabu(double t,double h,double e){
double t0,
t1,y;t0=t;
do{
t1=t0+h;
if(f1(t1) h=2*h;} else{ if(fabs(h) { y=t0;break;}