To compute the SVD of *A*, an orthogonal matrix *V* is generated such that the transformed matrix *AV* = *W* has orthogonal columns. Scaling each column of *W* so that its 2-norm is unity we get :

where is an matrix and is an nonnegative diagonal matrix. The corresponding SVD of

(2) |

Comparing equation (2) with equation (1), we notice the different sizes of *U* and as well as and . However, since the null columns of *U* and are associated with zero diagonal elements of and , respectively, the non-null columns of *U* and form orthogonal bases for *range*(*A*) and there is no essential difference between equations (1) and (2). Successive Jacobi rotations are applied to *A* in order to obtain *W*, giving us the following iteration :

*A*_{k+1} = *A*_{k} *J*_{k}

where

*a*^{(k+1)}_{p} = *c a*^{(k)}_{p} - *s a*^{(k)}_{q}

*a*^{(k+1)}_{q} = *s a*^{(k)}_{p} + *c a*^{(k)}_{q}

*a*^{(k+1)T}_{p} *a*^{(k+1)}_{q} =
*c s a*^{(k)T}_{p} *a*^{(k)}_{p} + *c ^{2}*

Dividing by

Denoting and we get :

giving us and

For every iteration we choose different column pairs (*p*,*q*) and obtain a matrix *J*_{k} that will orthogonalize those columns. As we are computing *W*, we can also compute *V* beginning with the identity matrix and performing the following with each iteration :

*V*_{k+1} = *V*_{k} *J*_{k}

There are several ways of choosing the pairs of columns (*p*,*q*) that are orthogonalized at every step. The approach used here is one that is suitable for parallel implementation on the CM.

12/18/1997