Logo

MRANK

Updated 2024-02-13 19:35:19.003000

Syntax

SELECT [westclintech].[wct].[MRANK](
  <@MatrixQuery, nvarchar(max),>
 ,<@IS3N, bit,>)

Description

Use MRANK to calculate the rank of a matrix. The rank of the matrix is calculated from its singular value decomposition where the rank is the number of elements in in the diagonal matrix which are greater than the tolerance. The tolerance is calculated as the W0 * MAX(m,n) * eps where m is the number of rows in the input matrix, n is the number of columns in the input matrix and eps is 2-53*.*

Arguments

@MatrixQuery

the SELECT statement, as text, used to return the input matrix for this function. The SELECT statement specifies the column names from the table or view or can be used to enter the matrix values directly. Data returned from the @MatrixQuery select must be of the type float or of a type that implicitly converts to float.

@Is3N

a bit value identifying the form for the resultant table returned by @MatrixQuery. Enter 'True' for a resultant table in 3rd normal form. Enter 'False' for a de-normalized table in 'spreadsheet' form.

Return Type

float

Remarks

If @MatrixQuery does not return a square or a rectangular matrix an error will be generated.

Examples

Example #1

In the example we calculate the rank of a matrix in 'spreadsheet' format; i.e. in row/column format.

SELECT wct.MRANK(

                    '

       SELECT *

       FROM (VALUES

        (1,1,1,1)

       ,(1,2,4,8)

       ,(1,3,9,27)

       ,(1,4,16,64)

       ,(1,5,25,125)

       )n(x1,x2,x3,x4)',

                    0

                ) as [Matrix Rank];

This produces the following result.

{"columns":[{"field":"Matrix Rank","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"Matrix Rank":"4"}]}

Example #2

Using the same matrix content as Example #1 but with the data in 3rd normal form.

SELECT wct.MRANK(

                    'SELECT *

   FROM (VALUES

    (0,0,1)

   ,(0,1,1)

   ,(0,2,1)

   ,(0,3,1)

   ,(1,0,1)

   ,(1,1,2)

   ,(1,2,4)

   ,(1,3,8)

   ,(2,0,1)

   ,(2,1,3)

   ,(2,2,9)

   ,(2,3,27)

   ,(3,0,1)

   ,(3,1,4)

   ,(3,2,16)

   ,(3,3,64)

   ,(4,0,1)

   ,(4,1,5)

   ,(4,2,25)

   ,(4,3,125)

   )n(r,c,x)',

                    1

                ) as [Matrix Rank];

This produces the following result.

{"columns":[{"field":"Matrix Rank","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"Matrix Rank":"4"}]}

Example #3

With the matrix in CSV format, with the columns separated by commas and the rows separated by semi-colons.

SELECT wct.MRANK('1,1,1,1;1,2,4,8;1,3,9,27;1,4,16,64;1,5,25,125', 0) as [Matrix Rank];

This produces the following result.

{"columns":[{"field":"Matrix Rank","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"Matrix Rank":"4"}]}

See Also

SVD - Economy-sized singular value decomposition using a formatted matrix as input