from
Sparse null space and orthogonal
by Bruno Luong
NULL space and ORTHOGONAL basis for sparse matrix
|
| spnull(S, varargin)
|
function Z = spnull(S, varargin)
% Z = SPNULL(S)
% returns a sparse orthonormal basis for the null space of S, that is,
% S*Z has negligible elements, and Z'*Z = I
%
% If S is sparse, Z is obtained from the QR decomposition.
% Otherwise, Z is obtained from the SVD decomposition
%
% Bruno Luong <brunoluong@yahoo.com>
% History
% 10-May-2010: original version
%
% See also SPORTH, NULL, QR, SVD, ORTH, RANK
if issparse(S)
[m n] = size(S);
try
[Q R E] = qr(S.'); %#ok %full QR
if m > 1
s = diag(R);
elseif m == 1
s = R(1);
else
s = 0;
end
s = abs(s);
tol = norm(S,'fro') * eps(class(S));
r = sum(s > tol);
Z = Q(:,r+1:n);
catch %#ok
% sparse QR is not available on old Matlab versions
err = lasterror(); %#ok
if strcmp(err.identifier, 'MATLAB:maxlhs')
Z = null(full(S), varargin{:});
else
rethrow(err);
end
end
else % Full matrix
Z = null(S, varargin{:});
end
end
|
|
Contact us