1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
function S = sssvd (matrix, ss_index) %#ok
%SSSVD singular values of a matrix in the SuiteSparse Matrix Collection.
%
% As of Nov 2012, only matrices for which min(size(A)) <= 30401
% have their singular values computed.
%
% Examples:
% S = sssvd ('HB/arc130')
% S = sssvd (6)
% index = ssget
% S = sssvd (6, index)
%
% S is a struct containing:
% s the singular values (a column vector of size min(size(A)))
% how a string
%
% See also ssget.
% ssget, Copyright (c) 2009-2022, Timothy A. Davis. All Rights Reserved.
% SPDX-License-Identifier: BSD-3-clause
if (nargin < 2)
% load the SuiteSparse index
ss_index = ssget ;
end
% look up the matrix in the SuiteSparse index
[group, matrix, id] = ssget_lookup (matrix, ss_index) ;
if (id == 0)
error ('invalid matrix') ;
end
% determine where the files go
params = ssget_defaults ;
svddir = [ params.topdir 'svd' filesep group ] ;
svdfile = [ svddir filesep matrix '_SVD.mat' ] ;
svdurl = [ params.topurl '/svd/' group '/' matrix '_SVD.mat' ] ;
% make sure the mat/Group directory exists
if (~exist (svddir, 'dir'))
mkdir (svddir) ;
end
% download the *_SVD.mat file, if not already downloaded
if (~exist (svdfile, 'file'))
fprintf ('downloading %s\n', svdurl) ;
fprintf ('to %s\n', svdfile) ;
tmp = tempname ; % download to a temp file first
try
websave (tmp, svdurl) ;
catch me
error ('SVD not yet computed for this matrix (or URL not found)') ;
end
movefile (tmp, svdfile, 'f') ; % move the new matrix into place
end
% load the SVD, which sets the return value of S
load (svdfile) ;
|