数学实验“线性方程组的最速下降法与共轭梯度法解法”实验报告(内含matlab程序代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.

толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.

以下无正文

相关文档
最新文档