欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》
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收敛。
欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》