- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈尔滨工程大学
矩阵计算上机实验报告
姓名:
学号:
2012-2013 学年第二学期《矩阵计算》上机实验报告
矩阵计算实验报告
实验名称 矩阵计算上机实验 指导教师
姓名 年级 学号 成绩
实验一、用共轭梯度法求实对称线性方程组的解
一、实验目的:
1、学习使用 matlab 编写数值计算程序。
2、了解共轭梯度法原理和编程方法。
二、实验要求:
1、阐述共轭梯度法原理和编程方法。 2、根据共轭梯度法算法原理编写 matlab 程序,并运行的出结果。
( 提示:下文是 Jacobi 迭代求解线性方程组的实验过程, 仅供参考。提交作业时, 请删除!)
三、实验原理:
设 n 阶非奇异矩阵A的主对角元 a11,a22, ,ann 全不为0,记D= diag
(
a11,a22, ,a )是非奇异对角阵,做A的一个分裂:
nn
A D (D A) 。
1 1 -1 。迭代过程式为 x Bx g
记B D (D A) I D A,g D b
k 。
1 k
这种迭代方法称为 Jacobi 迭代法。 其迭代矩阵记为:
B 右端向量记为: g J
J
1
a
11
0
a
12
a
13
a
1n
1
a
22
a
21
0 a
23
a
2n
B
J 1 =
a a a 0 a
33 31 32 3n
1
a
nn
a
n1
a
n2
a 0
n3
0
a
21
a
22
a
12
a
11
0
a
13
a
a
11
23
a
22
a
1n
a
11
a
2n
a
22
-
a
31
a
33
a
32
a
33
0
a
3n
a
33
a
n1
a
nn
a
n2
a
nn
a
n3
a
nn
0
2012-2013 学年第二学期《矩阵计算》上机实验报告
( k) ( k) ( k) ( k ) T
记k x1 ,x ,x , ,x ,Jacobi 迭代过程为:
x ( )
2 3 n
( k
x
1
1)
0
a
12
a
13
a
1n
(
x
1
k)
b
1
( k
x
2
1
)
a
21
0
a
23
a
2n
( k)
2
x
b
2
( k
x
3
1
)
D
1
a
31
a
32
0
a
3n
( k)
x
3
b
3
( k
n
x
1)
a
n1
a
n2
a
n3
0
( k)
n
x
b
n
对照等号两边,得到计算
( k 1)
x (i=1,2, ? ,n) 的公式为
i
i 1 n
( 1
k 1) ( k ) ( k)
xi a x a x b
ij j ij j i
a
ii j 1 j i 1
,或
n
( 1 k
k 1) ( k) ( )
x ,i=1,2, ?
i b a x x
i ij j i
a
j 1
ii
四、实验内容与步骤:
1、实验内容: 依照实验原理编写共轭梯度法的程序。
2、实验步骤: 首先,在电脑上安装 matlab ,然后,启动matlab ,新建一个 M文件。
实验程序如下:
程序代码程序代码说明
function % use the function 。
[x,k]=jacobi( A ,b); % 初始化 x0。 x=zeros(size(b)); % D为A 的主对角元上的值。
D=diag(diag( A ));
-1 。
% 根据公式 B D (L U)
B=inv(D)*(D- A );
g=inv(D)*b; % 最小精度设为tol 。 tol=1e-6;
err=2; % 从 k=0 开始迭代。
k=0;
% 先要判断是否收敛,如果不收
while(errtol)
敛,则提示出错。如果收敛,则根
x1=B*x+g; 据 x1 =B*x+g,计算出第一步迭代的
err= max(abs(x1-x));
值。
x=x1; % 把 x 的值放在 x1 中,k 加一继 k=k+1;
续迭代,直到达到设定的精度为止。
end
五、实验数据及结果:
1、实验数据为:
A=[-2 1 0; 1 -2 1 ; 0 1 -2];
b=[-2 0 -3] ;
2、实验结果为: (请指出你选定的初值x 和所用的迭代次数 )
0
2012-2013 学年第二学期《矩阵计算》上机实验报告
六、实验分析:
1、在本次实验中所输的初值所对应的矩阵为收敛的, 所以会产生结果, 如果当输入一
个
Jacobi 矩阵为发散的初值时,则 matlab 会提示出错。同时也可能会导致死机。
2、在本次实验中, 很容易把迭代矩阵中各分量的代码的写错, 因为编程技术还不够熟
练,
所以在使用数学指令上还不够全面, 因此常翻阅书籍找指令代码, 这在以后的实验
中是
应该加强训练的。
3、通过本次实验也增强了我对 matlab 这个软件的了解。
实验二、利用正交化方法最小二乘法问题
一、
原创力文档


文档评论(0)