数学实验“线性方程组的最速下降法与共轭梯度法解法”实验报告(内含matlab程序代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西京学院数学软件实验任务书
课程名称数学软件实验班级数0901
学号0912020107姓名李亚强
实验课题线性方程组的最速下降法与共轭梯度法
实验目的熟悉线性方程组的最速下降法与共轭梯度法
实验要求
运用Matlab/C/C++/Java/Maple/Mathematica等其中
一种语言完成
实验内容线性方程组的最速下降法线性方程组的共轭梯度法
成绩教师
实验五实验报告
一、实验名称:最速下降法与共轭梯度法解线性方程组。
二、实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法思路,提高matlab 编程能力。
三、实验要求:已知线性方程矩阵,应用最速下降与共轭梯度法在相关软件编程求解线性方程组的解。
四、实验原理:
1.最速下降法:
从某个初始点)0(X 出发,沿)(X f 在点)0(X 处的负梯度方向
)
0()0()0()(AX b X f r -=-∇=求得)(X f 的极小值点)1(X ,即
)(min )0()0(0
r X f λλ+>然后从)1(X 出发,重复上面的过程得到)2(X 。如此下去,
得到序列{)(k X }
)
(...)()()()1()0(k X f X f X f >>>可以证明,从任一初始点)0(X 出发,用最速下降法所得
到的序列{)(k X }均收敛于问题使X 最小化)(X f 的解,也就是方程组b AX =的解。其收敛速度取决于1
1λλλλ+-n n ,其中1λ,n λ分别
为A 的最小,最大特征值。最速下降法迭代格式:给定初值)0(X ,)(k X 按如下方法决定:
())
()(1)(k )()()()(k )
()(X ,,)(k k k k T k k T k k k k r X Ar r r r AX b X f r λλ+=>
<><=-=-∇=+2.共轭梯度法
其基本步骤是在点)(k X 处选取搜索方向)(k d ,使其与前一次的搜索方向)1(-k d 关于A 共轭,即
(1)()(1),0
k k k d d Ad --<>=然后从点)(k X 出发,沿方向)(k d 求得)(X f 的极小值点)1(+k X ,即
)
(min )()()(0)1(k d X f X f k k λλ+=>+如此下去,得到序列{)(k X }。不难求得0,)1()(>=<-k k Ad d 的解为
)()1()1()()()
()1(,,k k k k k k k d Ad d d AX b X X ><>-<+=--+注意到)(k d 的选取不唯一,我们可取
)
1(1)()()(--+-∇=k k k k d X f d β由共轭的定义0,)1()(>=<-k k Ad d 可得:
>
<><-=----)1()1()1()(1,,k k k k k Ad d Ad r β共轭梯度法的计算过程如下:第一步:取初始向量)0(X ,计算
⎪⎪⎩
⎪⎪⎨⎧+=><><-=-=-∇==(0)0(0)(1))0()0()0()0(0(0)
(0)(0)(0)d X X ,,X )X (r d λλAd d Ad r A b f 第1+k 步:计算
⎪⎪⎪⎪⎪⎩
⎪⎪⎪⎪⎪⎨⎧+=><><-=+=><><-=-=-∇=+------(k)0(k)1)(k )()()()()
1(1(k))()1()1()1()(1(k)
(k)(k)d X X ,,r ,,X )X (r λλββk k k k k k k k k k k k k Ad d Ad r d d Ad d Ad
r A b f 五、实验内容:
%最速下降法
function [x,k]=fastest(A,b,eps);
x0=zeros(size(b),1);
x=x0;
k=0;
m=1000;
tol=1;
while tol>=eps
r=b-A*x0;
q=dot(r,r)/dot(A*r,r);
x=x0+q*r;
k=k+1;
tol=norm(x-x0);
x0=x;
if k>=m
disp('迭代次数太多,可能不收敛!');
return;
end
end
x
k
%共轭梯度法
function[k,x]=gong_e(A,b)
esp=input('请输入允许误差esp=');
x0=input('请输入初始值x0=');
k=0;
r0=b-A*x0;%求出dangqian梯度while norm(r0)>esp
r0=b-A*x0;
k=k+1;
if k==1
p0=r0;
else
lamda=(r0'*r0)/(p0'*A*p0);
r1=r0-lamda*A*p0;
p0=r0+(r0'*r0)/(r1'*r1)*p0;
x1=x0+lamda*p0;
x0=x1;
r0=r1;
end
end
x=r0;
k;
end
六、实验结果:
A=[520;641;125];
b=[1018-14]';
eps=1.0e-6;
x=
-0.8750
7.1875
-5.5000
k=
60