共轭梯度法程序及调试结果分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、设计题目

用共轭梯度法求二次函数的极小点及极小值。

2、运行与程序

(1)运行:打开matlab,确定conjugate_grad_2d.m文件夹为当前目录。

在命令窗中输入:f=conjugate_grad_2d([1,1],0.001)

选择不同的初始点坐标[0,0],[0,1],[1,0],和迭代精度0.01,0.0001,

进行运行时,需要多次调用conjugate_grad_2d函数。

(2)程序及说明:

function f=conjugate_grad_2d(x0,t)

%用共轭梯度法求已知函数f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2的极值点

%已知初始点坐标:x0

%已知收敛精度:t

%求得已知函数的极值:f

x=x0;

syms xi yi a; %定义自变量,步长为符号变量

f=xi^2+2*yi^2-4*xi-2*xi*yi; %创建符号表达式f

fx=diff(f,xi); %求表达式f对xi的一阶求导

fy=diff(f,yi); %求表达式f对yi的一阶求导

fx=subs(fx,{xi,yi},x0); %代入初始点坐标计算对xi的一阶求导实值

fy=subs(fy,{xi,yi},x0); %代入初始点坐标计算对yi的一阶求导实值

fi=[fx,fy]; %初始点梯度向量

count=0; %搜索次数初始为0

while double(sqrt(fx^2+fy^2))>t %搜索精度不满足已知条件

s=-fi; %第一次搜索的方向为负梯度方向

if count<=0

s=-fi;

else

s=s1;

end

x=x+a*s; %进行一次搜索后的点坐标

f=subs(f,{xi,yi},x); %构造一元搜索的一元函数φ(a)

f1=diff(f); %对函数φ(a)进行求导

f1=solve(f1); %得到最佳步长a

if f1~=0

ai=double(f1); %强制转换数据类型为双精度数值

else

break %若a=0,则直接跳出循环,此点即为极值点

end

x=subs(x,a,ai); %得到一次搜索后的点坐标值

f=xi^2+2*yi^2-4*xi-2*xi*yi;

fxi=diff(f,xi);

fyi=diff(f,yi);

fxi=subs(fxi,{xi,yi},x);

fyi=subs(fyi,{xi,yi},x);

fii=[fxi,fyi]; %下一点梯度向量

d=(fxi^2+fyi^2)/(fx^2+fy^2);

s1=-fii+d*s; %下一点搜索的方向向量

count=count+1; %搜索次数加1

fx=fxi;

fy=fyi; %搜索后终点坐标变为下一次搜索的始点坐标

end

x,f=subs(f,{xi,yi},x),count %输出极值点,极小值以及搜索次数

3、运行结果及分析

选择不同的初始点坐标[0,0],[0,1],[1,0],和迭代精度0.01,0.0001,

(1)f=conjugate_grad_2d([1,1],0.001)

此程序运行1秒后终止,结果如下:

X =[ 4, 2] %极小点坐标

f = -8 %极小值数值

count = 2 %迭代次数

f =-8

(2)f=conjugate_grad_2d([0,1],0.001)

此程序运行1秒后终止,结果如下:

X =[ 4, 2] %极小点坐标

f = -8 %极小值数值

count = 2 %迭代次数

f =-8

分析可得:

(1)由结果看出,程序经过2次迭代,得到二次函数的极小值坐标[4,2],极小值-8;

表明共轭梯度法收敛速度较快,计算量较小,稳定性高。

(2)选择不同的初始点坐标[0,0],[0,1],[1,0],[1,1],都是经过2次迭代得到一致

的结果;表明共轭梯度法初始点的选择不影响收敛结果。

(3)选择迭代精度0.0001,程序将近运行4秒才结束;可知迭代精度越高时,程序

运行的时候越长,所以在实际应用中选择适当的迭代精度,有利于提高计算的

效率。

(4)从共轭梯度法的计算过程可以看出,第一个搜索方向取作负梯度方向,这就是

最速下降法。其余各步的搜索方向是将负梯度偏转一个角度,也就是对负梯度

进行修正。所以共轭梯度法实质上是对最速下降法进行的一种改进,故它又被

称作旋转梯度法。

相关文档
最新文档