Function Repository Resource:

# BidiagonalDecomposition

Compute the bidiagonal decomposition of a numerical matrix

Contributed by: Jan Mangaldan
 ResourceFunction["BidiagonalDecomposition"][m] gives the bidiagonal decomposition for a numerical matrix m as a list of matrices {q,b,p}, where q and p are orthonormal matrices and b is an upper bidiagonal matrix.

## Details

The bidiagonal decomposition of a matrix is often used as the first step in computing the singular value decomposition.
The matrix m may be rectangular.
The original matrix m is equal to q.b.ConjugateTranspose[p].
q and p are column orthonormal matrices, whose transposes can be considered as lists of orthonormal vectors.

## Examples

### Basic Examples (1)

Compute the bidiagonal decomposition for a 3×2 numerical matrix:

 In[1]:=
 Out[1]=
 In[2]:=
 Out[2]=

### Scope (2)

m is a 3×4 matrix:

 In[3]:=

Find the bidiagonal decomposition of m using machine-number arithmetic:

 In[4]:=
 Out[4]=
 In[5]:=
 Out[5]=

Find the bidiagonal decomposition of m using 24-digit precision arithmetic:

 In[6]:=
 Out[6]=

The bidiagonal decomposition of a random complex-valued 2×4 matrix:

 In[7]:=
 Out[7]=

### Properties and Relations (5)

m is a random matrix with 3 columns:

 In[8]:=
 Out[8]=

Find the bidiagonal decomposition of m:

 In[9]:=
 Out[9]=

Verify that m is equal to q.b.ConjugateTranspose[p]:

 In[10]:=
 Out[10]=

Verify that q and p are unitary:

 In[11]:=
 Out[11]=
 In[12]:=
 Out[12]=

b has the same singular values as m:

 In[13]:=
 Out[13]=
 In[14]:=
 Out[14]=

## Version History

• 1.0.0 – 24 January 2022