大连理工大学矩阵大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013级工科硕士研究生
《矩阵与数值分析》课程数值实验报告
大连理工大学
Dalian University of Technology
一、设
6
2
2
10
1
N
N
j
S
j
=
=
-
∑,分别编制从小到大和从大到小的顺序程序分别计算
100001000000
,
S S
并指出两种方法计算结果的有效位数。
程序代码:
从小到大:
function f=s(N); %定义函数s
f=0; %初始值为0
for j=N:-1:3 %j从3到n循环(从小到大) ft=1000000/(j^2-1); %Sj
f=f+ft; %SN
end
从大到小:
function f=s(N); %定义函数s
f=0; %初始值为0
for j=N:-1:3 %j从3到n循环(从小到大) ft=1000000/(j^2-1); %Sj
f=f+ft; %SN
end
执行结果:
从小到大:
s(10000)
ans =
4.16566671666167e+05
s(1000000)
ans =
4.166656666671731e+05 有效数字:16,16 从大到小: s(10000) ans =
4.165666716661668e+05
s(1000000) ans =
4.166656666671667e+05 有效数字:16,16 分析:
小数和大数相加时,按照从大到小的顺序和按照从小到大的顺序得出的结果不同,前者由
于舍入误差的影响而使结果不准确,所以应避免大数吃小数的现象。
二、解线性方程组
1.分别利用Jacobi 迭代法和Gauss-Seidel 迭代法求解线性方程组Ax b =,其中常向量为()21n -维随机生成的列向量,系数矩阵A 具有如下形式
1111111122n n n n n n n n T I I I A I I T I --------+-⎛⎫ ⎪
- ⎪= ⎪- ⎪
-+⎝
⎭, 其中1
211112n T --⎛⎫
⎪
- ⎪= ⎪- ⎪
-⎝⎭
为1n -阶矩阵,1n I -为1n -阶单位矩阵,迭代法计算停止的条件为:10
12
10k k x x -+-<,给出10,100,1000n =时的不同迭代步数. 程序代码:
Jacobi迭代法
function [u,l,b,x,kk,delta,A]=Ja(n)
t=2.*eye(n-1);
s=-eye(n-2);
z=zeros(n-2,1); %生成n-1行1列零向量
z1=zeros(1,n-1);
s1=[z s];
s1=[s1;z1];
s2=[s z];
s2=[z1;s2];
T=t+s1+s2; %生成T
i=-eye((n-1)*(n-2));
a1=[zeros(((n-1)*(n-2)),n-1) i];
a2=[a1;zeros(n-1,((n-1)*(n-1)))];
b1=[i zeros(((n-1)*(n-2)),n-1)];
b2=[zeros(n-1,((n-1)*(n-1)));b1];
d=4.*eye((n-1)*(n-1)); %生成D
b=round(randn((n-1)*(n-1),1)); %生成b
A0=[];
for k=1:1:n-1
x=T+2.*eye(n-1);
A0=blkdiag(A0,x); %生成A
end
A=A0+a2+b2; %生成A
u=-(triu(A)-d); %生成U
l=-(tril(A)-d); %生成L
x=randn((n-1)*(n-1),1); %生成初始x
%%以下为计算迭代部分
B=inv(d)*(l+u);
ff=inv(d)*b;
kk=1;
derta=10;
delta=[];
x0=x;
while derta>10^-10&(kk<800);
x0=x;
x=B*x+ff;
derta=norm(x-x0);
kk=kk+1;
delta=[delta derta];
end
plot(delta);
End
执行结果:
运行结果:[u,l,b,x,kk,delta,A]=Ja(10)情况
图1 迭代曲线收敛步数465 收敛值9.899081611039407e-11
[u,l,b,x,kk,delta,A]=Ja(100)情况下
图2 迭代步数48988 收敛终值9.997187164447103e-11 当n=1000时,矩阵规模超出内存。
程序代码:
Gauss-Seidel迭代法
function kk=Gs(n)
t=2.*eye(n-1);
s=-eye(n-2);
z=zeros(n-2,1); %生成n-1行1列零向量
z1=zeros(1,n-1);
s1=[z s];
s1=[s1;z1];
s2=[s z];
s2=[z1;s2];
T=t+s1+s2; %生成T
i=-eye((n-1)*(n-2));
a1=[zeros(((n-1)*(n-2)),n-1) i];
a2=[a1;zeros(n-1,((n-1)*(n-1)))];
b1=[i zeros(((n-1)*(n-2)),n-1)];