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 = BN = 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 endendX=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 = BN = 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 enderr=abs(norm(X'-P)); relerr=err/(norm(X)+eps); P=X' ; if (err<delta)|(relerr<delta) break endend X=X' ;
對於同一個初時狀態:
Utitled3.m
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)
啟動並執行結果顯示:
Jacobi Iteration 收斂,而Gauss-Seidel Iteration發散!
事實上,對P=[x0;y0;z0=1;]Gauss-Seidel Iteration收斂。