SVD
Updated 2024-02-13 02:14:29.837000
Syntax
SELECT [westclintech].[wct].[SVD](
<@Matrix, nvarchar(max),>
,<@MatrixName, nvarchar(4000),>)
Description
Use the scalar function SVD to calculate the economy-sized singular value decomposition of an m-x-n matrix A*.* SVD returns an m-x-n orthogonal matrix U*,* an n-x-n orthogonal matrix V and an n-x-n diagonal matrix W such that,
A = UWVT
SVD expects a string representation of the matrix, with columns separated by commas and rows separated by semi-colons.
Arguments
@MatrixName
a string identifying the name of matrix to be returned; 'U', 'V' or 'W'.
@Matrix
a string representation of the matrix.
Return Type
nvarchar(max)
Remarks
The string representations of @Matrix must only contain numbers, commas (to separate the columns), and semi-colons to separate the rows.
Consecutive commas will generate an error.
Consecutive semi-colons will generate an error.
Non-numeric data between commas will generate an error.
Non-number data between semi-colons will generate an error.
To convert non-normalized data to a string format, use the MATRIX2STRING or the MATRIX2STRING_q function.
To convert normalized data to a string format, us the NMATRIX2STRING or the NMATRIX2STRING_q function.
To convert the string result to a table, use the table-valued function MATRIX .
@MatrixName must be either 'U', 'V' or 'W' or an error message will be generated.
Examples
In this example, we return the U matrix from the singular value decomposition.
DECLARE @A as varchar(max)
= wct.MATRIX2STRING_q('SELECT
*
FROM (
VALUES
(1,2,3,4)
,(2,3,4,5)
,(3,4,5,6)
,(4,5,6,7)
)n(x1,x2,x3,x4)');
SELECT wct.SVD(@A, 'U') as U;
This produces the following result.
{
"columns": [
{
"field": "U",
"headerClass": "ag-right-aligned-header",
"cellClass": "ag-right-aligned-cell",
"flex": 1,
"resizable": "true",
"wrapText": "true",
"autoHeight": "true"
}
],
"rows": [
{
"U": "0.314721188083371,-0.775210019137647,-0.287437287650082,0.466240072997124;0.427472435994882,-0.342443158005239,0.730764549218788,-0.407410325844917;0.540223683906393,0.0903237031271687,-0.599217235487328,-0.583899567301538;0.652974931817905,0.523090564259578,0.155889973918623,0.525069820149331"
}
]
}
To get the W matrix, we would have entered:
SELECT wct.SVD(@A, 'W') as W;
This produces the following result .
W
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
17.1651513899117,0,0,0;0,1.16515138991168,0,0;0,0,1.05167369421319E-16,0;0,0,0,1.01544874061251E-16
And, to get the V matrix we enter the following:
SELECT wct.SVD(@A, 'V') as V;
returning
V
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0.314721188083371,0.775210019137647,0.547722557505166,0;0.427472435994883,0.342443158005239,-0.730296743340221,-0.408248290463864;0.540223683906394,-0.0903237031271688,-0.182574185835056,0.816496580927726;0.652974931817905,-0.523090564259577,0.365148371670111,-0.408248290463863
In this example we calculate UWV' returning the original matrix.
SELECT [0],
[1],
[2],
[3]
FROM
(
SELECT *
FROM wct.Matrix(wct.MATMULT(wct.MATMULT(wct.SVD(@A, 'U'), wct.SVD(@A, 'W')),
wct.TRANSPOSE(wct.SVD(@A, 'V'))))
) p
PIVOT
(
SUM(ItemValue)
For ColNum IN ([0], [1], [2], [3])
) as pvt
ORDER BY RowNum;
This produces the following result.
{"columns":[{"field":"0","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"1","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"2","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"3","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"0":"1","1":"2","2":"3","3":"4"},{"0":"2","1":"3.00000000000001","2":"4","3":"5"},{"0":"3","1":"4.00000000000001","2":"5","3":"6"},{"0":"4","1":"5.00000000000001","2":"6.00000000000001","3":"7.00000000000001"}]}
See Also
LU - LU factorization with partial pivoting
SVDECOMP - Calculate the economy-sized singular value decomposition of an m-x-n matrix A.