六、线性方程组超松弛迭代方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、用谱半径判别超松弛迭代法产生的迭代序列的脸敛散性。
function H=ddpbj(A,om)
D=diag(diag(A));U=-triu(A,1);
L=-tril(A,-1);iD=inv(D-om*L);
B2=iD*(om*U+(1-om)*D);
H=eig(B2);mH=norm(H,inf);
if mH>=1
disp('谱半径不小于1,序列发散,谱半径和特征值如下:')
else
disp('谱半径小于1,序列收敛,谱半径和特征值如下:')
end
mH
>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];
>> H=ddpbj(A,1.15)
谱半径小于1,序列收敛,谱半径和特征值如下:
mH =
0.1596
H =
0.1049 + 0.1203i
0.1049 - 0.1203i
-0.1295 + 0.0556i
-0.1295 - 0.0556i
>> H=ddpbj(A,5)
谱半径不小于1,序列发散,谱半径和特征值如下:
mH =
14.1082
H =
-14.1082
-2.5107
0.5996 + 2.6206i
0.5996 - 2.6206i
2、超松弛迭代法的程序。
function X=sordd(A,b,X0,P,om,wucha,max1)
D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);dD=det(D);
if dD==0
disp('因为对角矩阵D奇异,所以此方程组无解。')
else
disp('因为对角矩阵D非奇异,所以此方程组有解。')
iD=inv(D-om*L);B2=iD*((1-om)*D+om*U);f2=om*iD*b;jX=A\b;X=X0;
[n m]=size(A);
for k=1:max1
X1=B2*X+f2;djwcX=norm(X1-X,P);
xdwcX=djwcX/(norm(X,P)+eps);
if (djwcX return else k,X1',k=k+1;X=X1; end end if (djwcX disp('收敛,A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下;') else disp('没有达到给定的精度,迭代次数超过最大次数,方程组的精确解jX和近似解X如下;') X=X';jX=jX' end end X=X';D,U,L,jX=jX' >> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7]; >> b=[4;2;6;-3]; >> X0=[0;0;0;0]; >> X=sordd(A,b,X0,inf,1.15,0.00001,10) 因为对角矩阵D非奇异,所以此方程组有解。 k = 1 ans = 0.9200 0.0230 -1.4737 0.1312 k = 2 ans = 0.4981 0.2961 -1.5687 -0.0612 k = 3 ans = 0.3882 0.3834 -1.5809 -0.0894 k = 4 ans = 0.3689 0.3898 -1.5802 -0.0917 k = 5 ans = 0.3694 0.3896 -1.5794 -0.0915 k = 6 ans = 0.3697 0.3893 -1.5793 -0.0913 k = ans = 0.3698 0.3892 -1.5793 -0.0913 X = 0.3698 0.3892 -1.5793 -0.0913 >> X=sordd(A,b,X0,inf,5,0.00001,10) 因为对角矩阵D非奇异,所以此方程组有解。k = 1 ans = 4.0000 -3.7500 6.8750 -1.0714 k = 2 ans = -3.5179 18.3594 -83.9565 80.2264 k = 3 ans = 1.0e+003 * 0.0762 -0.2654 0.9868 -1.1096 k = 4 ans = 1.0e+004 * -0.1268 0.4111 -1.4431 1.5336 k = 5 ans = 1.0e+005 * 0.1721 -0.5769 2.0427 -2.1726 k = 6 ans = 1.0e+006 * -0.2414 0.8122 -2.8777 3.0672 k = 7 ans = 1.0e+007 * 0.3410 -1.1464 4.0599 -4.3266 k =