function [A, T] = neumann(n)
%NEUMANN Singular matrix from the discrete Neumann problem.
%   C = GALLERY('NEUMANN',N) takes N=M^2, a perfect square or a 
%   two-element vector N and returns C, a singular, row 
%   diagonally dominant matrix resulting from discretizing the 
%   Neumann problem with the usual five point operator on a regular
%   mesh. C is sparse and has a one-dimensional null space with 
%   null vector ONES(N,1).

%   Reference:
%   [1] R.J. Plemmons, Regular splittings and the discrete Neumann problem, 
%   Numer. Math., 25 (1976), pp. 153-161.
%
%   Copyright (c) 1984-98 by The MathWorks, Inc.
%   $Revision: 1.7 $  $Date: 1997/11/21 23:29:50 $

if length(n) == 1
   m = sqrt(n);
   if m^2 ~= n, error('N must be a perfect square.'), end
   n(1) = m; n(2) = m;
end

T = tridiag(n(1), -1, 2, -1);
T(1,2) = -2;
T(n(1),n(1)-1) = -2;

A = kron(T, eye(n(2))) + kron(eye(n(2)), T);
