Quelle est la raison pour laquelle LAPACK utilise

9

La routine QR de LAPACK stocke Q en tant que réflecteurs domestiques. Il met à l'échelle le vecteur de réflexion v avec 1/v1 , de sorte que le premier élément du résultat devient 1 , il n'a donc pas besoin d'être stocké. Et il stocke un vecteur τ séparé , qui contient les facteurs d'échelle nécessaires. Donc, une matrice de réflecteur est comme ceci:

H=IτvvT,

v n'est pas normalisé. Alors que, dans les manuels, la matrice du réflecteur est

H=I2vvT,

v est normalisé.

Pourquoi LAPACK met-il à l'échelle v avec 1/v1 , au lieu de le normaliser?

τv1Hτ2v2/v

(La raison de ma question est que j'écris une routine QR et SVD, et j'aimerais connaître la raison de cette décision, si je dois la suivre ou non)

geza
la source

Réponses:

7

C'est la variante bloquée de Householder-QR qui anime cette conception. Si vous regardez dans le livre de Golub et Van Loan (Ch 5.2 ou plus), ils parlent de la façon dont les k-itérations de l'algorithme peuvent être bloquées ensemble en accumulant les réflecteurs individuels dans un réflecteur de rang k de la forme , où et sont des matrices "hautes et maigres" de taille . Cet algorithme fait plus de travail mais est plus rapide dans la pratique car il est riche en appels gemm (). Malheureusement, cela est un gaspillage de stockage en raison de la nécessité de représenter et indépendamment.I+WYTWYn×kWY

Dans un article ultérieur (cité ci-dessous), Van Loan décrit une structure de données "symétrisée" plus efficace, un réflecteur de bloc de la forme . Ici est toujours , mais l'exigence de flop / stockage pour former a été éliminée en introduisant , une petite matrice triangulaire supérieure . Bien que la nécessité de multiplier par introduise une petite quantité de travail supplémentaire, c'est généralement un gain net car .I+YTYTYn×kWTk×kTk<<n

Au sein de LAPACK, l'algorithme non bloqué n'est vraiment qu'un cas limitant de l'algorithme de bloc, jusqu'au choix des symboles (ce qui nous amène à , une petite version du Triangle ).k1τ1×1T

Référence: Schreiber, Robert et Charles Van Loan. "Une représentation WY efficace pour le stockage des produits des transformations des ménages." SIAM Journal on Scientific and Statistical Computing 10.1 (1989): 53-57.

rchilton1980
la source
Merci d'avoir répondu! Je ne vois pas, que est juste -sized . Dans l'article cité, dans l'algorithme 5, est et est -2. Il finit donc par être la version du manuel, pas la version LAPACK. Dois-je manquer quelque chose? τ1×1TYvT
geza
2

Vous n'avez pas besoin de stocker , vous pouvez le recalculer à partir du reste du vecteur. (Vous pouvez recalculer partir des autres entrées également dans la version normalisée, mais il s'agit clairement d'un calcul instable en raison de ces soustractions.)τv1

En fait, vous pouvez réutiliser la partie triangulaire inférieure de pour stocker , afin que la factorisation soit entièrement calculée en place. Lapack se soucie beaucoup de ces versions d'algorithmes en place.Rv2,...vn

Federico Poloni
la source
1

Ma suggestion est basée sur la documentation d'Intel MKL https://software.intel.com/en-us/mkl-developer-reference-c-geqrf . Il ressemble aux valeurs sur et au-dessus de la diagonale du magasin de sortie R, il ne reste donc que le triangle inférieur pour Q. Il semble naturel d'utiliser un stockage supplémentaire pour les facteurs d'échelle.

VorKir
la source