Die QR-Routine von LAPACK speichert Q als Reflektoren für Haushalte. Es skaliert den Reflexionsvektor mit , sodass das erste Element des Ergebnisses wird und nicht gespeichert werden muss. Und es speichert einen separaten Vektor, der die erforderlichen Skalierungsfaktoren enthält. Eine Reflektormatrix ist also wie folgt:
wobei nicht normalisiert ist. Während in Lehrbüchern die Reflektormatrix ist
wo normalisiert ist.
Warum skaliert LAPACK mit , anstatt es zu normalisieren?
Die benötigte Speicherung ist dieselbe (anstelle von muss gespeichert werden), und danach kann das Anwenden von schneller erfolgen, da keine Multiplikation mit erforderlich ist (die Multiplikation mit in der Lehrbuchversion kann optimiert werden, wenn Anstelle einer einfachen Normalisierung wird mit √ skaliert).
(Der Grund meiner Frage ist, dass ich eine QR- und SVD-Routine schreibe und ich möchte den Grund für diese Entscheidung wissen, ob ich sie befolgen muss oder nicht.)