% FIGURE 0.1.2 function X = LINEQ(A,B,N) % % ARGUMENT DESCRIPTIONS % % A - (INPUT) A IS THE N BY N MATRIX IN THE LINEAR SYSTEM A*X=B. % X - (OUTPUT) X IS THE SOLUTION VECTOR OF LENGTH N. % B - (INPUT) B IS THE RIGHT HAND SIDE VECTOR OF LENGTH N. % N - (INPUT) N IS THE NUMBER OF EQUATIONS AND NUMBER OF UNKNOWNS % IN THE LINEAR SYSTEM. % % COPY B ONTO X for I=1:N X(I) = B(I); end % BEGIN FORWARD ELIMINATION for K=1:N-1 IBIG = K; BIG = abs(A(K,K)); % FIND THE LARGEST POTENTIAL PIVOT for I=K:N if (abs(A(I,K)) > BIG) BIG = abs(A(I,K)); IBIG = I; end end if (BIG == 0.0) error ('The matrix is singular') end % SWITCH ROW K WITH THE ROW (IBIG) % CONTAINING THE LARGEST POTENTIAL PIVOT for J=K:N TEMP = A(IBIG,J); A(IBIG,J) = A(K,J); A(K,J) = TEMP; end TEMP = X(IBIG); X(IBIG) = X(K); X(K) = TEMP; for I=K+1:N AMUL = -A(I,K)/A(K,K); if (AMUL ~= 0.0) % ADD AMUL TIMES ROW K TO ROW I for J=K:N A(I,J) = A(I,J)+AMUL*A(K,J); end X(I) = X(I)+AMUL*X(K); end end end if (A(N,N) == 0.0) error ('The matrix is singular') end % BEGIN BACK SUBSTITUTION X(N) = X(N)/A(N,N); for K=N-1:-1:1 for J=K+1:N X(K) = X(K)-A(K,J)*X(J); end X(K) = X(K)/A(K,K); end