function [ a, info ] = r8mat_solve ( n, nrhs, a )
%*****************************************************************************80
%
%% R8MAT_SOLVE uses Gauss-Jordan elimination to solve an N by N linear system.
%
% Licensing:
%
% This code is distributed under the GNU LGPL license.
%
% Modified:
%
% 31 January 2005
%
% Author:
%
% John Burkardt
%
% Parameters:
%
% Input, integer N, the order of the matrix.
%
% Input, integer NRHS, the number of right hand sides. NRHS
% must be at least 0.
%
% Input, real A(N,N+NRHS), contains in rows and
% columns 1 to N the coefficient matrix, and in columns N+1 through
% N+NRHS, the right hand sides.
%
% Output, real A(N,N+NRHS), the coefficient matrix
% area has been destroyed, while the right hand sides have
% been overwritten with the corresponding solutions.
%
% Output, integer INFO, singularity flag.
% 0, the matrix was not singular, the solutions were computed;
% J, factorization failed on step J, and the solutions could not
% be computed.
%
info = 0;
for j = 1 : n
%
% Choose a pivot row IPIVOT.
%
ipivot = j;
apivot = a(j,j);
for i = j+1 : n
if ( abs ( apivot ) < abs ( a(i,j) ) )
apivot = a(i,j);
ipivot = i;
end
end
if ( apivot == 0.0 )
info = j;
return;
end
%
% Interchange.
%
temp = a(ipivot,1:n+nrhs);
a(ipivot,1:n+nrhs) = a(j, 1:n+nrhs);
a(j, 1:n+nrhs) = temp;
%
% A(J,J) becomes 1.
%
a(j,j) = 1.0;
a(j,j+1:n+nrhs) = a(j,j+1:n+nrhs) / apivot;
%
% A(I,J) becomes 0.
%
for i = 1 : n
if ( i ~= j )
factor = a(i,j);
a(i,j) = 0.0;
a(i,j+1:n+nrhs) = a(i,j+1:n+nrhs) - factor * a(j,j+1:n+nrhs);
end
end
end
return
end