天天看點

解線性方程組的疊代法(高斯-塞德爾疊代法)

MATLAB函數檔案

function x=Agui_GS(A,b)
%方程Ax=b,x0為初始向量
%e為精度,N為最大疊代次數
n=length(b);
N=100;
e=1e-4;
x0=zeros(n,1);
x=x0;
x0=x+2*e;
k=0;
A1=tril(A);
A2=inv(A1);
while norm(x0-x,inf)>e&&k<N
    k=k+1;
    x0=x;
    x=-A2*(A-A1)*x0+A2*b;
    format long 
        k
        disp(x');
end
if k==N 
    wArning('已達到最大疊代次數');
end
           

例1

>> A=[10 -1 -2;-1 10 -2;-1 -1 5]

A =

    10    -1    -2
    -1    10    -2
    -1    -1     5

>> b=[72;83;42]

b =

    72
    83
    42
 
>> x=agui_GS(A,b)

k =

     1

   7.200000000000000   9.020000000000001  11.644000000000000


k =

     2

  10.430800000000001  11.671880000000002  12.820536000000001

......

k =

     8

  10.999997817131550  11.999998662278413  12.999999295881992


x =

  10.999997817131550
  11.999998662278413
  12.999999295881992

           

例2

>> A=[4 -1 0 -1 0 0;-1 4 -1 0 -1 0;0 -1 4 -1 0 -1;-1 0 -1 4 -1 0;0 -1 0 -1 4 -1;0 0 -1 0 -1 4]

A =

     4    -1     0    -1     0     0
    -1     4    -1     0    -1     0
     0    -1     4    -1     0    -1
    -1     0    -1     4    -1     0
     0    -1     0    -1     4    -1
     0     0    -1     0    -1     4

>> b=[0;5;-2;5;-2;6]

b =

     0
     5
    -2
     5
    -2
     6

>> x=agui_GS(A,b)

k =

     1

  1 至 3 列

                   0   1.250000000000000  -0.187500000000000

  4 至 6 列

   1.203125000000000   0.113281250000000   1.481445312500000

......

k =

    14

  1 至 3 列

   0.999917067032988   1.999910029133425   0.999924067870464

  4 至 6 列

   1.999930546109209   0.999942834404453   1.999966725568729


x =

   0.999917067032988
   1.999910029133425
   0.999924067870464
   1.999930546109209
   0.999942834404453
   1.999966725568729
           

繼續閱讀