最优化实验报告

更新时间:2023-10-13 11:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《最优化方法及其应用》 课 程 实 验 报 告

项目名称: 学生姓名: 学生学号: 指导教师: 完成日期:

一、 实验内容

项目一 一维搜索算法(一)

最优化方法课程实验 许庆平 3111008162 杨理平 2013年12月30 [实验目的]

编写加步探索法、对分法、Newton法的程序。 [实验学时] 2学时 [实验准备]

1.掌握一维收搜索中搜索区间的加步探索法的思想及迭代步骤; 2.掌握对分法的思想及迭代步骤;

3.掌握Newton法的思想及迭代步骤。 [实验内容及步骤]

编程解决以下问题:

1.用加步探索法确定一维最优化问题

min?(t)?t3?2t?1t?0

的搜索区间,要求选取t0?0,h0?1,??2.

2.用对分法求解

min?(t)?t(t?2),

已知初始单谷区间[a,b]?[?3,5],要求按精度??0.3,??0.001分别计算.

3.用Newton法求解

min?(t)?t3?2t?1,

已知初始单谷区间[a,b]?[0,1],要求精度??0.01.

项目二 一维搜索算法(二)

[实验目的]

编写黄金分割法、抛物线插值法的程序。 [实验学时]

2学时 [实验准备]

1.掌握黄金分割法的思想及迭代步骤; 2.掌握抛物线插值法的思想及迭代步骤。 [实验内容及步骤]

编程解决以下问题: 1.用黄金分割法求解

min?(t)?t(t?2), 已知初始单谷区间[a,b]?[?3,5],要求精度??0.001.

2.用抛物线插值法求解

minf(x)?8x3?2x2?7x?3,

b]?[0,2],??0.001. 已知初始单谷区间[a,

项目三 常用无约束最优化方法(一)

[实验目的]

编写最速下降法、Newton法(修正Newton法)的程序。

[实验学时]

2学时 [实验准备]

1.掌握最速下降法的思想及迭代步骤。 2.掌握Newton法的思想及迭代步骤; 3.掌握修正Newton法的思想及迭代步骤。 [实验内容及步骤]

编程解决以下问题: 1.用最速下降法求

2minf(X)?x12?25x2,X0?[2,2]T,??0.01.

2.用Newton法求

2minf(X)?60?10x1?4x2?x12?x2?x1x2,

TX?[0,0],??0.01. 0初始点

3.用修正Newton求

minf(X)?4(x1?1)2?2(x2?1)2?x1?x2?10,

TX?[0,0],??0.01. 0初始点

项目四 常用无约束最优化方法(二)

[实验目的]

编写共轭梯度法、变尺度法(DFP法和BFGS法)程序。

[实验学时] 2学时 [实验准备]

1.掌握共轭方向法的思路及迭代过程; 2.掌握共轭梯度法的思想及迭代步骤;

3.掌握DFP法和BFGS法的思想及迭代步骤。 [实验内容及步骤]

编程解决以下问题:

22TX?[1,1]min(x?4x)0121.用共轭梯度法求得,取初始点,??0.01. 22minf(X)?2x?x12?x1x2,自定初始点,??0.01. 2.用共轭梯度法求

22Tminf(X)?4(x?5)?(x?6)X?[8,9],??0.01. 1203.用DFP法求,初始点

项目五 常用约束最优化方法

[实验目的]

编写外点罚函数法、外点罚函数法的程序。

[实验学时]

2学时 [实验准备]

1.掌握外点罚函数法的思想及迭代步骤; 2.掌握内点罚函数法的思想及迭代步骤。 [实验内容及步骤]

编程解决以下问题:

1.用外点罚函数法编程计算

minf(X)??x1?x2,?g1(X)?lnx2?0,s.t.??h1(X)?x1?x2?1?0,

精度??10.

2.用内点罚函数法编程计算

?5?1?min?(x1?1)3?x2?,?3??x1?1?0,s.t.??x2?0.

TX?[3,4]0初始点取为,初始障碍因子取u1?10,缩小系数取c?0.1.

二、 实验主要步骤

首先用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)

if(fabs(h)

h=-0.25*h;} }while(1); return y; }

//主函数

void main(){double t,h,e;

cout<<\请输入初始点t:\cout<<\请输入步长h:\ cout<<\请输入精确度e:\double x=jiabu(t,h,e);

cout<<\极小点为:\} (2)

//函数f(t)=t(t+2)的导函数 double f2(double t){ double y;

y=2*t+2;return y;} //对分法

double duifen(double a,double b,double e){ double x0=0.5*(a+b); do{

if(f2(x0)>0) {

b=x0;x0=(a+b)*0.5;}

else {a=x0;x0=(a+b)*0.5;} }while(fabs(a-b)>=e); return x0;} //主函数 void main(){ double a,b,e;

cout<<\请输入区间:\cout<<\请输入精确度:\double t=duifen(a,b,e);

cout<<\极小点为:x=\

(3)

//函数f(t)=t^3-2t+1的一阶导函数 double f3(double t){

本文来源:https://www.bwwdw.com/article/nj4f.html

Top