FR共轭梯度法与拟牛顿法计算机实现及仿真.docx

上传人:b****7 文档编号:16751687 上传时间:2023-07-17 格式:DOCX 页数:15 大小:246.86KB
下载 相关 举报
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第1页
第1页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第2页
第2页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第3页
第3页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第4页
第4页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第5页
第5页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第6页
第6页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第7页
第7页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第8页
第8页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第9页
第9页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第10页
第10页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第11页
第11页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第12页
第12页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第13页
第13页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第14页
第14页 / 共15页
FR共轭梯度法与拟牛顿法计算机实现及仿真.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

FR共轭梯度法与拟牛顿法计算机实现及仿真.docx

《FR共轭梯度法与拟牛顿法计算机实现及仿真.docx》由会员分享,可在线阅读,更多相关《FR共轭梯度法与拟牛顿法计算机实现及仿真.docx(15页珍藏版)》请在冰点文库上搜索。

FR共轭梯度法与拟牛顿法计算机实现及仿真.docx

FR共轭梯度法与拟牛顿法计算机实现及仿真

FR共轭梯度法与拟牛顿法计算机实现及仿真

信计0701作者:

翟铮学号:

5

摘要:

最速下降法和牛顿法是最基本的无约束最优化方法,但由于最速下降法收敛速度慢而牛顿法虽然收敛速度比较快,但需要计算目标函数的Hesse矩阵及其逆矩阵,计算量比较大。

我们这里采用采用一种无需计算二阶导数,但收敛速度比较快的一种算法,即FR共轭梯度。

关键词:

FR共轭梯度法、拟牛顿法、黄金分割法、最优一维线性搜索、收敛性

一、FR共轭梯度法与拟牛顿法

1、共轭梯度法

在共轭梯度方向法中,如果取初始的搜索方向

,而以以下各共轭方向

由第k次迭代点的负梯度

与已经得到的共轭方向

的线性组合来确定,这样就构造了一种具体的共轭方向法。

因为每一个共轭方向都依赖于迭代点处的负梯度,所以称之为共轭梯度法(conjugategradientmethod)

给定初始点

,取初始搜索方向

,从

出发,沿

进行一维搜索,得到迭代点

,一下按

来构造搜索方向,

的选取应该使得

是共轭的。

因为

且要使

是共轭的,应有

,所以

于是得到n个搜索方向

如下:

Fletcher_Reeves公式为

2、拟牛顿法:

牛顿法成功的关键是利用了Hesse矩阵提供的曲率信息,但计算Hesse矩阵工作量大,并且有的目标函数的Hesse矩阵很难计算,甚至不好求出。

针对这一问题,拟牛顿法比牛顿法更为有效。

这类算法仅利用目标函数值和一阶导数的信息,构造出目标函数的曲率近似,使方法具有类似牛顿法的收敛速度快的优点。

一般的拟牛顿法算法为:

给出初始点

如果

得搜索方向

(或计算

由线性搜索得步长因子

校正

使得拟牛顿条件成立。

本次实验采用DFP校正,校正公式为:

二、计算机实现步骤

由于该问题设计的问题比较复杂,所用变量多,为防止变量之间的冲突,在下面的程序中全部用函数来实现。

函数一:

计算函数在任意点处的梯度值。

函数名:

gradient_my(f,y,num),

参数:

f:

待求梯度函数y:

待求梯度点num:

函数变量数

函数二:

黄金分割法求最优步长。

函数名:

golden_search(f,a,b),

参数:

f:

待求梯度函数a:

搜索区间左端点b:

搜索区间右端点

函数三:

共轭梯度法。

函数名:

conjugate_gradient(f,x0,error),

参数:

f:

待求梯度函数x0:

初始点error:

允许误差

函数四:

拟牛顿法

函数名:

quasi_Newton(f,x0,error),

参数:

f:

待求梯度函数x0:

初始点error:

允许误差

三、实验结果及仿真

第一题、Rosenbrock函数

设定黄金分割法的步长区间为

,搜索精度为0.001,设定共轭梯度法误差为:

0.001

调用函数:

conjugate_gradient(f,[-1.2,1],0.001);

结论:

从图上可以看到利用共轭梯度法求解过程中,从初始点向收敛点迭代的步长是阶段性的变化的,期间有的阶段步长很小,阶段间的步长比较大。

此方法在搜索在收敛中比较快,有效的避免了最速下降法的锯齿效应。

第三题:

Wood函数

 

解:

我们用上述的共轭梯度法求解,导致搜索精度低,达不到函数停止迭代的下限,当搜索次数增大时,导致了迭代不收敛,因此我们试图改用拟牛顿法来求解,观察拟牛顿法在处理高维函数时的优异性。

我们用拟牛顿法设定搜索步长区间为[-15,15],误差精度为:

0.001得到的结果如下:

迭代次数

X

Y

Z

W

1

-3.00000

-1.00000

-3.00000

-1.00000

2

-2.19396

-0.86038

-2.27451

-0.87381

3

-2.44735

-0.57344

-2.05230

-0.54747

4

-3.08965

5.91018

-2.94903

5.31308

5

1.83003

6.50315

0.98570

5.77727

6

-2.58836

7.31350

-2.55296

5.74866

7

-2.07720

4.07977

-2.88577

8.54865

8

-2.08072

3.93519

-2.93265

8.63671

9

-1.42740

1.08110

-3.22100

10.46009

10

-0.80527

0.27410

-3.06216

8.88119

76

1.07314

1.14360

0.91394

0.81642

77

1.06164

1.12478

0.92729

0.84102

78

1.04445

1.09663

0.94733

0.87837

79

1.01963

1.04288

0.96666

0.91740

80

1.01630

1.03885

0.96776

0.92561

81

1.01066

1.03129

0.97072

0.94075

82

0.97768

0.96009

1.01125

1.02000

83

0.96822

0.93931

1.02478

1.04712

84

0.98839

0.97846

1.00975

1.02145

85

1.00025

1.00087

1.00022

1.00027

86

1.00020

1.00042

0.99978

0.99957

87

0.99999

0.99998

1.00000

1.00001

第四题:

Powell奇异函数:

解:

设定黄金分割法的步长区间为:

[-0.1,0.1],搜索精度为:

0.0001,共轭梯度法的终止点误差范围为

迭代终止点为:

[0.0673-0.00670.03320.0334]

调用函数:

conjugate_gradient(f,[3,-1,0,1],0.0001);可得结果为:

由于函数为四维,我们以下下分别用三个图形来表示收敛效果,分别列出了

图1、X-Y-Z图2、X-Y-W图三Y-Z-W

图1

图2

图3

结论:

从上图可以看到,共轭梯度法搜索过程中,初始步长较大,进行搜索,随着距离收敛点的距离面小,步长逐步变小,向最优解逼近。

共轭梯度法主程序:

functionA=conjugate_gradient(f,x0,error)

[a,b]=size(x0);

initial_gradient=gradient_my(f,x0,b);

norm=0;

norm0=0;

symsstep_zzh;

A=[];

fori=1:

b

norm0=norm0+(initial_gradient(i))^2;

end

search_direction=-initial_gradient;

x=x0+step_zzh*search_direction;

f_step=subs(f,findsym(f),x);

best_step=golden_search(f_step,-0.5,0.5);

x_1=x0+best_step*search_direction;

norm=norm0;

k=1;

whilenorm>error&&k<80

gradient=gradient_my(f,x_1,b);

norm=0;

fori=1:

b

norm=norm+(gradient(i))^2;

end

new_direction=-gradient+norm/norm0*search_direction;

x=x_1+step_zzh*new_direction;

f_step=subs(f,findsym(f),x);

best_step=golden_search(f_step,-0.1,0.1)

x_2=x_1+best_step*new_direction

A=[A;x_2];

norm0=norm;

search_direction=new_direction;

x_1=x_2;

k=k+1;

end

[w,z]=size(A);

ifz==2

plot(A);

end

a_return=x;

 

拟牛顿法主程序:

functionA=quasi_Newton(f,x0,error)

[a,b]=size(x0);

G0=eye(b);

initial_gradient=gradient_my(f,x0,b);

norm0=0;

norm0=initial_gradient*initial_gradient';

symsstep_zzh;

A=[x0];

search_direction=-initial_gradient;

x=x0+step_zzh*search_direction;

f_step=subs(f,findsym(f),x);

best_step=golden_search(f_step,-15,15);

x_1=x0+best_step*search_direction;

A=[A;x_1];

k=1;

whilenorm0>error

ox=x_1-x0;

og=gradient_my(f,x_1,b)-initial_gradient;

G1=G0+(ox'*ox)/(ox*og')-(G0*og'*og*G0)/(og*G0*og');

ifk+1==b

new_direction=-gradient_my(f,x_1,b);

else

new_direction=-(G1*(gradient_my(f,x_1,b))')';

end

x=x_1+step_zzh*new_direction;

f_step=subs(f,findsym(f),x);

best_step=golden_search(f_step,-15,15)

x_2=x_1+best_step*new_direction

A=[A;x_2];

initial_gradient=gradient_my(f,x_1,b);

norm0=initial_gradient*initial_gradient';

x0=x_1;x_1=x_2;

G0=G1;

k=k+1;

end

求函数在任意点的梯度向量:

functiongr=gradient_my(f,y,num)

x='';

var='x_';

varible=[];

fori=1:

num

var

(2)=x(i);

VAR=sym(var);

varible=[varible,VAR];

end

r=[];

fori=1:

num

r=[r,diff(f,varible(i))];

end

gr=subs(r,findsym(r),y);

黄金分割法:

functionbestval=golden_search(f,a,b)

lamda0=a+0.382*(b-a);

muu0=a+0.618*(b-a);

f_l=subs(sym(f),findsym(sym(f)),lamda0);

f_muu=subs(sym(f),findsym(sym(f)),muu0);

iff_l>f_muu

a=lamda0;

else

b=muu0;

end

whileb-a>0.001&&abs(f_l-f_muu)>0.01

lamda=a+0.382*(b-a);

muu=a+0.618*(b-a);

f_l=subs(sym(f),findsym(sym(f)),lamda);

f_muu=subs(sym(f),findsym(sym(f)),muu);

iff_l>f_muu

a=lamda;

else

b=muu;

end

end

bestval=(a+b)/2;

ree=(f_l+f_muu)/2

end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2