% SPRAND SPRAND Sparse Uniform Random Matrix
% 
% Usage
% 
% Creates a sparse matrix with uniformly distributed random entries (on [0,1]).  The
% syntax for its use is
% 
%   y = sprand(x)
% 
% where x is a sparse matrix, where y is a sparse matrix that has
% random entries where x is nonzero.  The second form specifies the
% size of the matrix and the density
% 
%   y = sprand(m,n,density)
% 
% where m is the number of rows in the output, n is the number of 
% columns in the output, and density (which is between 0 and 1) is
% the density of nonzeros in the resulting matrix.  Note that for very
% high densities the actual density of the output matrix may differ from
% the density you specify.  This difference is a result of the way the
% random entries into the matrix are generated.  If you need a very dense
% random matrix, it is better to generate a full matrix and zero out the 
% entries you do not need.

% Copyright (c) 2002-2006 Samit Basu

function y = sprand(x,n,density)
if (nargin == 1)
  [i,j] = find(x);
  s = rand(size(i));
  y = sparse(i,j,s);
else
  m = int32(x(1));
  n = int32(n(1));
  density = max(0.0,min(1.0,density(1)));
  cnt = int32(density*m*n);
  if (cnt == 0)
    y = sparse(m,n);
    return;
  end
  i = randi(1,m*ones(cnt,1));
  j = randi(1,n*ones(cnt,1));
  A = [i,j];
  A = unique(A,'rows');
  i = A(:,1);
  j = A(:,2);
  s = rand(size(i));
  y = sparse(i,j,s,m,n);
end
 
 
