数学与计算科学学院
实 验 报 告
实验项目名称 powell法求解无约束优化问题
所属课程名称 最优化方法
实 验 类 型 算法编程
实 验 日 期
班 级
学 号
姓 名
成 绩
一、实验概述:【实验目的】
掌握Matlab数值计算的基本方法;
掌握powell法并利用powell法解课本第358页第五题,使用MATLAB编程实现;
调整参数并对数值结果进行分析。
【实验原理】
Powell方法是一种有效的直接搜索法,这种方法本质上是共轭方向法。
Powell方法把整个计算过程分成若干个阶段,每一阶段(一轮迭代)由n+1次一维搜索组成。在算法的每一阶段中,先依次沿着已知的n个方向搜索,得一个最好点,然后沿着本阶段的初点与该最好点连线方向进行搜索,求得这一阶段的最好点。再用最后的搜索方向取代前n个方向之一,开始下一阶段的迭代。
具体计算步骤如下:
1.给定初始点,n个线性无关的方向,允许误差,置;
2.置,从出发,依次沿方向进行搜索,得到点,再从出发,沿着方向作一维搜索,得到点;
3.若,则停止计算,得点;否则,令,置,返回步骤2.
改进的powell法与原来的方法主要区别在于替换方向的规则不同。
【实验环境】
Microsoft Windows 7
Matlab
二、实验内容:【实验方案】
1.选定题目,解的极小点,取初始点。
2.使用改进的powell算法解决问题,利用Matlab编写程序解决问题。
3.运行程序并调拭,得出结果。
4.分析结果。
【实验过程】(实验步骤、记录、数据、分析)
1. 编写出powell法解无约束优化问题的主程序:
clc;
clear;
Function[a,b]=section(x1,x2,d1,d2)
x11=x1;x22=x2;
d11=d1;d22=d2;
h0=1;
h=h0;alphal=0;
y1=y(x11,x22,d11,d22,alpha1); alpha2=h;y2=y(x11,x22,d11,d22,alpha2);
t=0;
if y2>y1
h=-h;alpha3=alpha1;y3=y1;t=1;
end
while(1)
if t==1
alpha1=alpha2;y1=y2;
alpha2=alpha3;y2=y3;
else t=1;
end
alpha3=alpha2+h;
y3=y(x11,x22,d11,d22,alpha3);
if y3
h=2*h;
else
break;
end
end
if alpha1>alpha3
tem=alpha1;
alpha1=alpha3;
alpha3=tem;
a=alphal;b=alpha3;
else
a=alpha1;b=alpha3;
end
clc;
clear;
Function mk = armijo(fun,xk,rho,sigma,gk)
assert(rho>0&&rho<1);
assert(sigma>0&&sigma<0.5);
mk=0;max_mk=100;
while mk<=max_mk
x=xk-rho^mk*gk;
if feval(fun,x)<=feval(fun,xk)-sigma*rho^mk*norm(gk)^2
break;
end
mk=mk+1;
end
return;
2.编写出使用改进的powell法来求解问题的Matlab程序(详细程序见附录源程序)。
3.运行程序,得出结果如图所示:
从上述运行结果可以得出,最优解为,最优值为。
【实验结论(结果)小结结论clc;
clear;
%??3??eê?μ?×?±êx1,x2oí???÷·??òd1,d2
Function[a,b]=section(x1,x2,x3,d1,d2,d3)
x11=x1;x22=x2;x33=x3;
d11=d1;d22=d2;d33=d3
h0=1;%3?ê??ˉ
h=h0;alphal=0;
y1=y(x11,x22,x33,d11,d22,d33,alpha1);%′úè?alpha1£??ó?a