Matlab實現——Jacobi Iteration and Gauss-Seidel Iteration

歡迎前往個人博客 駑馬點滴 和視頻空間 嗶哩嗶哩-《挨踢日誌》

Use Jacobi Iteration and Gauss-Seidel Iteration to solve the following linear system with several different initial guesses for p.

x+z=2

-x+y=0

x+2y-3z=0 

下面是這兩個程序對比:

 

%Program 3.4 (Jacobi Iteration)

function X=jacobi (A, B, P, delta, max1)

% Input  - A is an N x N nonsingular matrix

%        - B is an N x 1 matrix

%        - P is an N x 1 matrix; the initial guess

%         - delta is the tolerance for P

%         - max1 is the maximum number of iterations

% Output - X is an N x 1 matrix: the jacobi approximation to

%           the solution of AX = B

N = length(B);

for k=1:max1

   for j=1:N

      X(j)=(B(j)-A(j, [1:j-1, j+1:N])*P([1:j-1, j+1:N]))/A(j, j);

   end

   err=abs(norm(X'-P));   relerr=err/(norm(X)+eps);

   P=X' ;

   if (err<delta)|(relerr<delta)

      break

   end

end

X=X' ;


 

%Program 3.5 (Gauss-Seidel Iteration)

function X=gseid(A,B,P,delta, max1)

% Input  - A is an N x N nonsingular matrix

%        - B is an N x 1 matrix

%        - P is an N x 1 matrix; the initial guess

%    - delta is the tolerance for P

%    - max1 is the maximum number of iterations

% Output - X is an N x 1 matrix: the gauss-seidel approximation

%           to the solution of AX = B

N = length(B);

for k=1:max1

   for j=1:N

      if j==1

        X(1)=(B(1)-A(1,2:N)*P(2:N))/A(1,1);

      elseif j==N

         X(N)=(B(N)-A(N,1:N-1)*(X(1:N-1))')/A(N,N);

      else

                 %X contains the kth approximations and P the (k-1)st

        X(j)=(B(j)-A(j,1:j-1)*X(1:j-1)'-A(j,j+1:N)*P(j+1:N))/A(j,j);

      end

   end

err=abs(norm(X'-P));

   relerr=err/(norm(X)+eps);

   P=X' ;

   if (err<delta)|(relerr<delta)

       break

   end

end

 

X=X' ;


 

 

 

對於同一個初時狀態:

Utitled3.m

<span style="color:#000000">A=[1,0,1;

    -1,1,0;

    1,2,-3;];

B=[2;0;0;];

P=[1;2;3;];

delta=10e-15;

max1=200;

X=jacobi (A, B, P, delta, max1)</span>




運行的結果顯示:

Jacobi Iteration 收斂,而Gauss-Seidel Iteration發散!

事實上,對P=[x0;y0;z0=1;]Gauss-Seidel Iteration收斂。

 

歡迎前往個人博客 駑馬點滴 和視頻空間 嗶哩嗶哩-《挨踢日誌》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章