西京学院数学软件实验任务书
实验五实验报告
一、实验名称:最速下降法与共轭梯度法解线性方程组。
二、实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法思路,提高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 , 即
)(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=[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。