- 4
- 0
- 约3.99千字
- 约 9页
- 2021-06-08 发布于山东
- 举报
数学与计算科学学院
实验报告
实验项目名称
Powell 法求解极小化问题
所属课程名称
最优化方法
实验种类
算法编程
实验日期
2015.11.20
班 级
学 号
姓 名
成 绩
一、实验概括:
【实验目的】
1、掌握 Powell 方法求解;
2、认识 Powell 的二次终止性;
【实验原理】
1、基本思想: Powell 方法把整个计算过程分成若干个阶段,每一阶段由 n+1 次一维搜索组成, 在算法的每一阶段中,先依次沿着已知的 n 个方向搜索得一个最
好点,然后沿着本阶段的初点与该最好点连线方向进行搜索,求得这一阶段的最好
点,再用最后搜索的方向取代前 n 个方向之一开始下一阶段。
2、二次终止性: 设 f (x) 1 xT Ax bT x c ,A 为 n 阶对称正定矩阵。任意给定
2
方向 d Rn , x0 , x1 Rn ,( x0 x1 ) 从 x0 出发,沿方向 d 搜索,得极小点 xa ;从 x1 出发,沿方向 d 搜索,得极小点 xb ;则 ( xb xa ) 与 d 对于 A 共轭。
当极小化正定二次函数时, 如果每轮迭代中前 n 个方向均线性无关,那么 Powell 方法至多经过 n 轮迭代达到极小点。
3、计算步骤:
Step1:给定初始点 x(0) ,n 个线性无关方向: d (1,1), d(1,2) ,
,d (1,n)
,误差
0, k 1;
Step2:让 x( k,0)
x(k
1) ,从 x( k,0)
出发,依次沿方向 d ( k,1) , d (k,2) ,
, d( k, n) 进行搜索,
得点 x( k ,1), x(k,2) ,
, x( k,n ) ,再从 x(k ,n)
出发,沿方向 d (k ,n 1)
x( k, n)
x( k,0) 作一维搜索得
到 x( k) 。
Step3 : 若
x(k )
x(k 1)
, 则 停 止 计 算 , 得 x(k) , 否 则 令
d ( k 1, j )
x( k, j 1) , j
1,2,
, n
Step4:让 k
k
1 ,返回步 2
【实验环境】
Windows7
Visual C++ 6.0
二、实验内容:
【实验方案】
1
1、本次试验的题目为:
用 Powell 方法求解下列问题:
min f ( x) ( x1
x2 )2
( x1
1)2
取初始点和初始方向分别为
:x (0)
2
; d (1,1)1
, d (1,2)
0
1
0
1
2、根据 Powell 方法的求解步骤,结合此题,运用
C 语言编写程序,在计算机
上实现。
【实验过程】(实验步骤、记录、数据、剖析)
1、由题目可得, f (x)
4x1
2x2
2
,G
2
f ( x)
4
2
2x2
2x1
2
其中海瑟矩阵是正
2
定矩阵,并且 d (1,1)
1
, d(1,2)
0
是一组 G 共轭的非零方向,所以此题具有二次
0
1
终止性。
2、通过定义函数, 将一阶导
f (x)
4x1
2x2
2
输入,用一维数组存储海瑟
2x2
2x1
矩阵:
float g1(float x[]){
float g=4*x[0]+2*x[1]-2;
return g;
}
float g2(float x[]){
float g=2*x[1]+2*x[0];
return g;
}
3、根据一维线性搜索,编写函数,求步长
a:
float qiubuchang(float x[],float g[],float d[],float G[]){
g[0]=g1(x); g[1]=g2(x);
float a,b,c;
b=g[0]*d[0]+g[1]*d[1];
c=d[0]*(d[0]*G[0]+d[1]*G[2])+d[1]*(d[0]*G[1]+d[1]*G[3]);
2
a=-b/c;
return a;
}
4、在主函数中调用以上函数,根据 Powell 法的步骤,经过两轮迭代,求出结
果。
【实验结论】(结果)
【实验小结】(收获体会)
本次试验,加深了对 Powell 方法,以及二次终止性等性质的认识与运用。虽然可以运用 Powell 方法进行笔算,可是当其用计算机实现时,仍是遇到了不少困难。在此后的学习中,要加深对算法的理解,使之与计算机相结合。
三、指导教师评语及成绩:
评语等级
评
语
良
中
及
不及格
优
格
实验报告准时达成 , 字迹清楚 , 文字表达流畅 , 逻辑性强
实验方案设计合理
实验过程(实验步骤详尽 , 记录完整 , 数据合理 , 剖析透彻)
4 实验结论正确 .
成 绩:
指导教师签名:
批阅日期:
3
附录1:源程序
#includemath.h
#in
原创力文档

文档评论(0)