数值实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值实验报告五
班级:2017级学号:**** 姓名:***
2017.12.5
1.数值实验问题
试用雅可比迭代法,高斯-赛德尔迭代法,超松驰迭代计算线性方程组:
取=(0,0,0,松弛因子分别取w=0.1t,1要求达到精度
。试通过数值计算得出不同的松弛因子所需要的迭代次数和收敛最快的松弛因子,并指出哪些松弛因子使得迭代发散。
2.数值方法
A=, L=-,
U=-, D=diag()
(1)雅可比迭代公式:
D.
(2)高斯-赛德尔迭代法公式:
(3)超松驰迭代方法公式:
其中w为松弛因子。
3.数值结果
如下表
最后四组,测得其在前10次内迭代所产生的结果,其中每一列为一
次迭代结果,分别如图:
SOR-1.6
SOR-1.7
SOR-1.8
SOR-1.9
由于计算数据限制,其前五十列数据基本为空,所以取51到60列
由此看出,最后四组数据是发散的,数据结果不稳定,不收敛。所以最后四组得不到所需数据。
4.讨论
本次实验,分别用雅可比迭代公式,高斯-赛德尔迭代公式,超松驰迭代公式计算了此线性方程组。其中,雅可比和高斯迭代能够很好的进行运算,而超松驰迭代方法中,若松弛因子取得不够恰当,则会导致整个运算失败,得不到所需的结果,迭代不收敛,发散。此外,在进行初始值的赋值中,我是对每个矩阵都进行了赋值操作,而更简便的是,调用matlab中存在的函数,对矩阵进行运算,从而简化操作和代码,也使程序适用性更广。
程序代码:
1.雅可比迭代
function [x]=yakebi(D,L,U,b,j)
format long
B=D\(L+U);
k=0;
x=[0;0;0];
xk=zeros(size(x));
xk1=zeros(size(x));
for k=1:10000
xk=x;
x=B*x+f;
xk1=x;
C=xk1-xk;
if norm(C)<=j
disp(xk);
disp(xk1);
disp(k);
disp(norm(C));
break
end
end
function [x]=yakebi(D,L,U,b,j) format long
B=D\(L+U);
k=0;
x=[0;0;0];
xk=zeros(size(x));
xk1=zeros(size(x));
for k=1:10000
xk=x;
x=B*x+f;
xk1=x;
C=xk1-xk;
if norm(C)<=j
disp(xk);
disp(xk1);
disp(k);
disp(norm(C));
break
end
end
2.高斯迭代
function [x]=gs(D,L,U,b,j) format long
B=(D-L)\U;
f=(D-L)\b;
k=0;
x=[0;0;0];
xk=zeros(size(x));
xk1=zeros(size(x));
for k=1:10000
xk=x;
x=B*x+f;
xk1=x;
C=xk1-xk;
if norm(C)<=j
disp(xk);
disp(xk1);
disp(k);
disp(norm(C));
break
end
end
D=diag([-55 36 47]);
j=10^-4;
L=[0 0 0;-21 0 0;-24 -7 0];
U=[0 5 -12;0 0 13; 0 0 0];
b=[41;52;12];
x=[0;0;0];
l=gs(D,L,U,b,j);
3.超松驰迭代
function [x]=sor(D,L,U,b,j,w) format long
Q=(1-w).*D+w.*U;
B=(D-w.*L)\Q;
f=(D-w.*L)\(w.*b);
k=0;
x=[0;0;0];
xk=zeros(size(x));
xk1=zeros(size(x));
for k=1:100
xk=x;
x=B*x+f;
xk1=x;
C=xk1-xk;
if norm(C)<=j
disp(xk);
disp(xk1);
disp(k);
disp(norm(C));
break
end
end
D=diag([-55 36 47]);
j=10^-4;
L=[0 0 0;-21 0 0;-24 -7 0]; U=[0 5 -12;0 0 13; 0 0 0]; b=[41;52;12];
x=[0;0;0];
for t=1:19
w=0.1*t;
l=sor(D,L,U,b,j,w);
end