数学实验“线性方程组的最速下降法与共轭梯度法解法”实验报告(内含matlab程序代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西京学院数学软件实验任务书
实验五实验报告
一、实验名称:最速下降法与共轭梯度法解线性方程组。
二、实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法
思路,提高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),0k k k d d Ad --<>=
然后从点)(k X 出发,沿方向)(k d 求得)(X f 的极小值点
)1(+k X , 即
)(m in )()
()(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=[5 2 0;6 4 1;1 2 5];
b=[10 18 -14]';
eps=1.0e-6;
x =
-0.8750
7.1875
-5.5000
k =
60
仅供个人用于学习、研究;不得用于商业用途。
For personal use only in study and research; not for commercial use.
Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden.
Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.
толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.
以下无正文