File: sssvd.m

package info (click to toggle)
suitesparse 1%3A7.10.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 254,920 kB
  • sloc: ansic: 1,134,743; cpp: 46,133; makefile: 4,875; fortran: 2,087; java: 1,826; sh: 996; ruby: 725; python: 495; asm: 371; sed: 166; awk: 44
file content (59 lines) | stat: -rw-r--r-- 1,694 bytes parent folder | download | duplicates (6)
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) ;