1 / 15
文档名称:

运筹学实验报告(f-r共轭梯度法、wolfe简约梯度法).doc

格式:doc   大小:250KB   页数:15
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

运筹学实验报告(f-r共轭梯度法、wolfe简约梯度法).doc

上传人:xnzct26 2021/1/7 文件大小:250 KB

下载得到文件列表

运筹学实验报告(f-r共轭梯度法、wolfe简约梯度法).doc

文档介绍

文档介绍:运筹学课程实验报告
姓名:********
学号:********
班级:********
日期:2012/12/17
一、实验目的:
1、掌握求解无约束最优化问题的 F-R共轭梯度法,以及约束最优化问题 Wolfe简约梯度法。
2、学会用MATLAB编程求解问题,并对以上方法的计算过程和结果进行分析。
二、实验原理与步骤:
1、F-R共轭梯度法
基本步骤是在点 处选取搜索方向, 使其与前一次的搜索方向 关于共轭,即
然后从点 出发,沿方向求得的极小值点 , 即
如此下去, 得到序列{}。不难求得的解为
注意到的选取不唯一,我们可取
由共轭的定义可得:
共轭梯度法的计算过程如下:
第一步:取初始向量, 计算
第步:计算
2、Wolfe简约梯度法
Wolfe基本计算步骤:
第一步:取初始可行点 ,给定终止误差 ,令k:=0;
第二步:设是的 m 个最大分量的下标集,对矩阵
A进行相应分解
第三步:计算 ,然后计算简约梯度;
第四步:构造可行下降方向 . 若 ^_D_Dd。否则进行第五步。
第五步:进行有效一维搜索,求解,得到最优解. 令 , k:=k+1, 转入第二步。
三、实验容:
1、(运筹学P153页第20题)用F-R法求解
选取初始点, .
2、(运筹学P154页第25题)用Wolfe法求解以下问题:
选取初始可行点 , .
四、问题求解:
问题1求解:(F-R法)
程序代码如下:
(1)主函数
syms x1 x2 r;
f=(1-x1)^2+2*(x2-x1^2)^2;
x=[x1,x2];
df=jacobian(f,x);
df=df.';
error=;
x0=[0,0]';
g1=subs(df,x,x0);
k=0;
while(norm(g1)>error)
if k==0
d=-g1;
else
bta=g1'*g1/(g0'*g0);
d=-g1+bta*d0;
end
y=subs(f,x,x0+r*d);
result=jintuifa(y,r);
result2=golden(y,r,result);
step=result2;
x0=x0+step*d;
g0=g1;g1=subs(df,x,x0);
d0=d;k=k+1;
end;
k
x0
(2)子函数
进退法确定一维搜索区间:
function result=jintuifa(y,r)
t0=0; step=;
t1=t0+step;
ft0=subs(y,{r},{t0});
ft1=subs(y,{r},{t1});
if(ft1<=ft0)
step=2*step;
t2=t1+step;
ft2=subs(y,{r},{t2});
while(ft1>ft2)
t1=t2;step=2*step;
t2=t1+step;
ft1=subs(y,{r},{t1});
ft2=subs(y,{r},{t2});
end
else
step=step/2;t2=t1;t1=t2-step;
ft1=subs(y,{r},{t1});
while(ft1>ft0)
step=step/2;t2=t1;t1=t2-step;
ft1=subs(y,{r},{t1});
end
end
result=[t2];
黄金分割法进行一维搜索:
function result=golden(y,r,m)
a=0;
b=m;
e=1e-5;
a1=a+*(b-a);
f1=subs(y,{r},{a1});
a2=a+*(b-a);
f2=subs(y,{r},{a2});
while abs(b-a)>=e
if f1<f2
b=a2;a2=a1;
f2=f1;a1=a+*(b-a);
f1=subs(y,{r},{a1});