Décomposition bidiagonale
La matrice rectangulaire A peut être représentée par A = Q · B · PT, où Q et P sont des matrices orthogonales et B une matrice bidiagonale.
À l'instar d'autres algorithmes de factorisation orthogonale (par exemple, les algorithmes de décomposition QR et LQ), cet algorithme utilise une suite de réflexions élémentaires pour transformer la matrice A. La transformation s'effectue à gauche puis à droite. Ces transformations suppriment progressivement les éléments hors diagonale jusqu'à ce que tous les éléments soient nuls, à l'exception de ceux situés sur les deux diagonales. Si le nombre de lignes de la matrice A est supérieur ou égal au nombre de colonnes, on obtient une matrice bidiagonale supérieure. Sinon, on obtient une matrice bidiagonale inférieure.
À l'issue de la sous-routine RMatrixBD, la matrice A est remplacée par la matrice bidiagonale B et une suite de transformations de réflexion est entreposée sous une forme compacte. La forme sous laquelle les transformations sont stockées et les paramètres de la sous-routine sont décrits plus en détail dans les commentaires de cette dernière.
La méthode est similaire à la décomposition QR, utilisant la partie inférieure de la matrice R pour entreposer la matrice Q. Ici, deux matrices sont entreposées : Q dans la partie inférieure de la matrice B et P dans sa partie supérieure.
Comme pour la décomposition QR, les sous-programmes de «décompression» des matrices Q et P sont présentés : RMatrixBDUnpackQ et RMatrixBDUnpackPT. Le premier permet d'obtenir la matrice Q ou certaines de ses colonnes, le second, la matrice PT ou certaines de ses lignes. Le sous-programme RMatrixBDUnpackDiagonals « décompresse » les diagonales d'une matrice bidiagonale.
Cet algorithme est issu de la bibliothèque LAPACK.