Décomposition de Schur
La décomposition de Schur est une représentation de la matrice A sous la forme A = ST T S, où S est une matrice orthogonale (matrice des vecteurs de Schur) et T une matrice quasi-triangulaire supérieure, c'est-à-dire une matrice triangulaire dont la diagonale principale est composée de blocs de dimensions 1×1 et 2×2.
Cet algorithme effectue la décomposition de Schur d'une matrice carrée à l'aide d'un algorithme QR avec décalages multiples. La matrice est ainsi réduite à une forme de Hessenberg supérieure. L'algorithme de décomposition de Schur d'une matrice sous forme de Hessenberg supérieure est ensuite exécuté. Cet algorithme est l'équivalent, pour les matrices par blocs, de l'algorithme QR classique avec double décalage. Comme tout algorithme pour matrices par blocs, il nécessite un paramétrage pour optimiser ses performances.
Vous pouvez ajuster la valeur de NS (paramètre interne de la sous-routine InternalSchurDecomposition) en définissant le nombre de décalages par itération. Les performances de l'algorithme sont optimales pour NS compris entre 4 et 16. Si NS dépasse 16, l'algorithme est considérablement ralenti. Les intervalles peuvent varier selon les systèmes, mais le constat reste globalement le même. La valeur par défaut de NS offre de bonnes performances sur la plupart des systèmes ; toutefois, si les performances sont critiques, il est conseillé d'ajuster ce paramètre manuellement. Il convient de noter que la valeur optimale de ce paramètre dépend à la fois des caractéristiques matérielles et des propriétés des matrices traitées.
La sous-routine RMatrixSchur effectue la décomposition de Schur. Elle renvoie les matrices T et S. Généralement, il est nécessaire de connaître la structure par blocs de la matrice T. Celle-ci est facilement identifiable : puisque tous les éléments situés sous les blocs sont nuls, les éléments a[i+1,i] égaux à 0 indiquent la limite des blocs.
Algorithme implémenté à partir de la sous-routine DHSEQR (bibliothèque LAPACK 3.0).