naginterfaces.library.rnla.svd_rowext_real¶
- naginterfaces.library.rnla.svd_rowext_real(jobu, jobvt, a, k, statecomm, rtol_abs=- 1.0, rtol_rel=- 1.0)[source]¶
svd_rowext_real
computes the singular value decomposition (SVD) of a real matrix , optionally computing the left and/or right singular vectors by using a randomised numerical linear algebra (RNLA) method.For full information please refer to the NAG Library document for f10ca
https://support.nag.com/numeric/nl/nagdoc_30.3/flhtml/f10/f10caf.html
- Parameters
- jobustr, length 1
Specifies options for computing part of or none of the matrix .
The first columns of (the left singular vectors) are returned in the array .
No columns of (no left singular vectors) are computed.
- jobvtstr, length 1
Specifies options for computing part of or none of the matrix .
The first rows of (the right singular vectors) are returned in the array .
No rows of (no right singular vectors) are computed.
- afloat, array-like, shape
The matrix .
- kint
, number of columns in random projection, .
- statecommdict, RNG communication object, modified in place
RNG communication structure.
This argument must have been initialized by a prior call to
rand.init_repeat
orrand.init_nonrepeat
.- rtol_absfloat, optional
The absolute tolerance, used in defining the threshold on estimating the rank of . If then is used unless in which case is used.
- rtol_relfloat, optional
The relative tolerance, used in defining the threshold on estimating the rank of . If then is used unless in which case is used.
- Returns
- sfloat, ndarray, shape
The largest singular values of in descending order.
- uNone or float, ndarray, shape
If , contains the first columns of (the left singular vectors, stored column-wise).
- vtNone or float, ndarray, shape
If , contains the first rows of (the right singular vectors).
- rint
, contains estimated rank of array .
- Raises
- NagValueError
- (errno )
On entry, .
Constraint: or .
- (errno )
On entry, .
Constraint: or .
- (errno )
On entry, .
Constraint: .
- (errno )
On entry, .
Constraint: .
- (errno )
On entry, .
Constraint: .
- (errno )
On entry, [‘state’] vector has been corrupted or not initialized.
- (errno )
On entry, and .
Constraint: if , .
- (errno )
On entry, and .
Constraint: if , .
- (errno )
On exit, , the rank of may be larger than .
Increase to obtain a more accurate rank estimate.
Smallest diagonal element of , from of , .
Tolerance used to determine rank .
- (errno )
has effective rank of zero.
First diagonal element of , from of , .
Tolerance used to determine rank .
- Notes
The SVD is written as
where is an matrix which is zero except for its diagonal elements, is an orthogonal matrix, and is an orthogonal matrix. The diagonal elements of are the singular values of ; they are real and non-negative, and are returned in descending order. The first columns of and are the left and right singular vectors of .
Note that the function returns , not .
If the rank of is , then has nonzero elements, and only columns of and are well-defined. In this case we can reduce to an matrix, to an matrix and to an matrix.
svd_rowext_real
is designed for efficiently computing the SVD in the case . The input argument should be greater than by a small oversampling parameter, , such that . A reasonable value for , to compute the SVD to within machine precision, is . The value of should not vary based on or . If is not known then the function can be used iteratively to refine the estimate and accuracy of the computed SVD; using a larger value of than necessary increases the computational cost of the function.As a by-product of computing the SVD, the function estimates .
If the input argument is less than the accuracy depends on the th singular value, . See Accuracy for more details.
A call to
svd_rowext_real
consists of the following:A random projection is applied, , where is an matrix. (Note that the product is computed using a Fast Fourier Transform, so can be computed in time.) See
randproj_dct_real()
for more details on the random projection.A pivoted decomposition of is calculated (see
lapackeig.dgeqp3
for more details). The rank estimate is then such that, on the diagonal of ,where and are the absolute and relative error tolerances, respectively, and is the largest diagonal index for which the above relation holds.
Obtain the SVD from the decomposition of (or, depending on the rank, an approximation to the SVD) of . This is referred to as row extraction.
Further details of the randomized SVD procedure can be found in Sections 4 and 5 of Halko et al. (2011).
- References
Anderson, E, Bai, Z, Bischof, C, Blackford, S, Demmel, J, Dongarra, J J, Du Croz, J J, Greenbaum, A, Hammarling, S, McKenney, A and Sorensen, D, 1999, LAPACK Users’ Guide, (3rd Edition), SIAM, Philadelphia, https://www.netlib.org/lapack/lug
Golub, G H and Van Loan, C F, 1996, Matrix Computations, (3rd Edition), Johns Hopkins University Press, Baltimore
Halko, N, 2012, Randomized methods for computing low-rank approximations of matrices, PhD thesis
Halko, N, Martinsson, P G and Tropp, J A, 2011, Finding structure with randomness: Probabilistic algorithms for constructing approximate matrix decompositions, SIAM Rev. (53(2)), 217–288, https://epubs.siam.org/doi/abs/10.1137/090771806