📄 sor法迭代.txt
字号:
实验目的:1、了解雅可比、塞德尔和SOR迭代法的原理。
2、学会使用雅可比、塞德尔和SOR迭代法解决具体问题。
3、对不同的题目比较几种方法的不同。
实验过程:SOR
1、初始化各个参变量,包括原始矩阵、所需精度和松弛因子。
2、对i=1:30做
a(i+1,1)=w*(y(1,1)-a(i,2)*x(1,2)-a(i,3)*x(1,3))/x(1,1)+(1-w)*a(i,1);
a(i+1,2)=w*(y(2,1)-a(i+1,1)*x(2,1)-a(i,3)*x(2,3))/x(2,2)+(1-w)*a(i,2);
a(i+1,3)=w*(y(3,1)-a(i+1,1)*x(3,1)-a(i+1,2)*x(3,2))/x(3,3)+(1-w)*a(i,3);
同时进行精度测试,如果达到所需精度就停止计算
3、输出结果矩阵。
实验程序:以5-16为例
%********************************
format long; %定义输出位数
x=[-8 1 1;1 -5 1;1 1 -4];
y=[1;16;7]; %初始化原始矩阵
a(1,3)=0; %初始化结果矩镇
w=1.15;%初始化松弛因子
e=1e-6; %输入所需精度
for i=1:30
a(i+1,1)=w*(y(1,1)-a(i,2)*x(1,2)-a(i,3)*x(1,3))/x(1,1)+(1-w)*a(i,1);
a(i+1,2)=w*(y(2,1)-a(i+1,1)*x(2,1)-a(i,3)*x(2,3))/x(2,2)+(1-w)*a(i,2);
a(i+1,3)=w*(y(3,1)-a(i+1,1)*x(3,1)-a(i+1,2)*x(3,2))/x(3,3)+(1-w)*a(i,3); %循环进行塞德尔迭代
if abs(a(i+1,3)-a(i,3))>e
;
else
break; %判断精度,如果达到就停止计算
end
end
disp(a);%输出结果矩镇
%*****************计算结果
0 0 0
-0.14375000000000 -3.71306250000000 -3.12133359375000
-1.10463193847656 -4.09501269741211 -3.03919779375549
-1.00359796733386 -3.99559112043873 -2.99388719367130
-0.99794781255324 -3.99878338336583 -2.99997713977604
-1.00012965331866 -4.00020705490691 -3.00010023264844
-1.00002472458828 -3.99999768192841 -2.99999140697628
-0.99999472284181 -3.99999715756890 -2.99999895457164
-1.00000023269393 -4.00000023943575 -3.00000029255154
-1.00000004156908 -4.00000004093238 -2.99999997983644
%*****************************************
%实际结果应为-1 -4 -3,迭代结果与实际结果非常接近,且迭代次数明显少于塞德尔迭代法,证明SOR迭代法具有可行性。
5-16
实验程序:
%***************************************
format long; %定义输出位数
x=[10 4 4;4 10 8;4 8 10];
y=[13;11;25]; %初始化原始矩阵
a(1,3)=0; %初始化结果矩镇
w=1.35;%初始化松弛因子
e=1e-6; %输入所需精度
for i=1:30
a(i+1,1)=w*(y(1,1)-a(i,2)*x(1,2)-a(i,3)*x(1,3))/x(1,1)+(1-w)*a(i,1);
a(i+1,2)=w*(y(2,1)-a(i+1,1)*x(2,1)-a(i,3)*x(2,3))/x(2,2)+(1-w)*a(i,2);
a(i+1,3)=w*(y(3,1)-a(i+1,1)*x(3,1)-a(i+1,2)*x(3,2))/x(3,3)+(1-w)*a(i,3); %循环进行塞德尔迭代
if abs(a(i+1,3)-a(i,3))>e
;
else
break; %判断精度,如果达到就停止计算
end
end
disp(a);%输出结果矩镇
%*******************************************
计算结果:
0 0 0
1.75500000000000 0.53730000000000 1.84701600000000
-0.14678064000000 -0.61857073440000 3.47586233875200
0.26343575764992 -2.19468687794312 4.38645470048441
0.47924286065023 -2.74302181399419 4.54341326919306
0.61505361296503 -2.79395764683166 4.47015066335950
0.63458700653720 -2.70755452356727 4.39192916974674
0.62333223877507 -2.64723882901647 4.36024331698789
0.61181129292416 -2.62790729037020 4.35667661447501
0.60733061245995 -2.62840172273181 4.36087851475573
0.60689681794610 -2.63253247467095 4.36410331078923
0.60753786221500 -2.63491565511363 4.36520230315039
0.60800695828490 -2.63552176558650 4.36521894325694
0.60816108865825 -2.63541082863767 4.36501007691330
0.60816002490077 -2.63522350648960 4.36488144664269
0.60812870360206 -2.63513323504786 4.36484588758164
0.60811012137104 -2.63511639186178 4.36485017701678
0.60810521353643 -2.63512426933618 4.36485983361752
0.60810597055032 -2.63513235013644 4.36486477228404
0.60810740234768 -2.63513562878676 4.36486581152254
0.60810811050099 -2.63513598603951 4.36486545121925
5-18
实验程序:
%****************************************************
format long; %定义输出位数
x=[-10.01 9.05 0.12;1.22 -4.33 2.76;1.25 -3.69 -12.37];
y=[1.43;3.22;0.58]; %初始化原始矩阵
a(1,3)=0; %初始化结果矩镇
w=1.15;%初始化松弛因子
e=1e-6; %输入所需精度
for i=1:30
a(i+1,1)=w*(y(1,1)-a(i,2)*x(1,2)-a(i,3)*x(1,3))/x(1,1)+(1-w)*a(i,1);
a(i+1,2)=w*(y(2,1)-a(i+1,1)*x(2,1)-a(i,3)*x(2,3))/x(2,2)+(1-w)*a(i,2);
a(i+1,3)=w*(y(3,1)-a(i+1,1)*x(3,1)-a(i+1,2)*x(3,2))/x(3,3)+(1-w)*a(i,3); %循环进行塞德尔迭代
if abs(a(i+1,3)-a(i,3))>e
;
else
break; %判断精度,如果达到就停止计算
end
end
disp(a);%输出结果矩镇
%*********************************************************
计算结果:
-10.01000000000000 9.05000000000000 0
10.74659240759241 1.26939818657094 0.75946122725952
-0.44599812426585 -0.63341329219424 -0.00237779348310
-0.75598509394876 -1.00688043188113 0.20399195925175
-1.09493961896724 -0.90941361806910 0.10021131007431
-0.94418993320525 -0.95126180904740 0.14765273822694
-1.00965834316462 -0.93142178276013 0.12612245845298
-0.97950702323156 -0.94041044400956 0.13593938169763
-0.99323998661069 -0.93631582455481 0.13146630541677
-0.98698449091016 -0.93818199983967 0.13350439619527
-0.98983499935612 -0.93733171863210 0.13257574206149
-0.98853617959300 -0.93771914628505 0.13299888033150
-0.98912798160010 -0.93754261582001 0.13280607875723
-0.98885832876181 -0.93762305134001 0.13289392818369
-0.98898119521439 -0.93758640115137 0.13285389987230
-0.98892521150710 -0.93760310069330 0.13287213864491
-0.98895072030515 -0.93759549160021 0.13286382820624
-0.98893909730255 -0.93759895865925 0.13286761483116
-0.98894439328668 -0.93759737890483 0.13286588946757
-0.98894198018837 -0.93759809871490 0.13286667562400
实验心得:1、在进行迭代以前必须判断所用的迭代法是否收敛。
2,在迭代是要注意代入变量的变化。
3、对于精度可根据具体需要自行调整。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -