⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sor法迭代.txt

📁 雅可比、塞德尔和SOR迭 代法的原理。代法的原雅可比、塞德尔和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 + -