LAPACKが(反射ベクトルを正規化する代わりに)QR分解でを使用する理由は何ですか?


9

LAPACKのQRルーチンは、Qをハウスホルダーリフレクターとして保存します。反射ベクトルをでスケーリングするため、結果の最初の要素はになるため、保存する必要はありません。そして、必要なスケールファクターを含む個別のベクトルを格納します。したがって、リフレクタマトリックスは次のようになりますv1/v11τ

H=IτvvT,

ここで、は正規化されていません。教科書では、反射板の行列はv

H=I2vvT,

ここで、は正規化されています。v

LAPACKはを正規化する代わりに、でスケーリングするのはなぜですか?v1/v1

必要なストレージは同じであり(代わりに、を格納する必要があります)、と乗算する必要がないため、適用をより高速に実行できます(教科書バージョンのとの乗算を最適化できます)。単純な正規化の代わりに、はによってスケーリングされます。τv1Hτ2v2/v

(私の質問の理由は、QRおよびSVDルーチンを作成していることです。私がそれに従う必要があるかどうかにかかわらず、この決定の理由を知りたいのですが)

回答:


7

この設計を推進しているのは、Householder-QRのブロックされたバリアントです。GolubとVan Loanの本(5.2章程度)を見ると、個々のリフレクタを形式のランクkリフレクタに累積することによって、アルゴリズムのk反復をどのようにブロックできるかが説明されてい。ここで、とはどちらもサイズ「トールスキニー」行列です。このアルゴリズムはより多くの作業を行いますが、gemm()呼び出しが豊富なため、実際には高速です。残念ながら、と独立して表す必要があるため、ストレージに無駄が生じます。I+WYTWYn×kWY

後の論文(下で引用)で、Van Loanはより効率的な「対称化された」データ構造、の形式のブロックリフレクターについて説明しています。ここで、は依然としてですが、を形成するためのフロップ/ストレージ要件は、小さい上三角行列である導入することによって削除されました。を乗算する必要があるため、少量の余分な作業が発生しますが、ため、これは通常は純益です。I+YTYTYn×kWTk×kTk<<n

LAPACK内では、非ブロック化アルゴリズムは、実際にはブロックアルゴリズムの限定的なケースであり、シンボルの選択に至るまで(、つまり少しバージョンになります)トライアングル)。k1τ1×1T

引用:シュライバー、ロバート、チャールズヴァンローン。「世帯主の変革の製品に対するストレージ効率の高いWY表現。」SIAM Journal on Scientific and Statistical Computing 10.1(1989):53-57。


答えてくれてありがとう!わかりません、は単なるサイズのです。引用した論文のアルゴリズム5では、はで、は-2です。したがって、LAPACKバージョンではなく、教科書バージョンになります。私は何かを逃していますか?1 × 1 T Y V Tτ1×1TYvT
geza

2

を保存する必要はありません。残りのベクトルから再計算できます。(正規化されたバージョンでも他のエントリからを再計算できますが、それらの減算のため、明らかに不安定な計算になります。)τv1

実際、下三角部分を再利用してを格納ので、分解は完全にインプレースで計算されます。Lapackは、これらのインプレースバージョンのアルゴリズムに多くの注意を払っています。Rv2,...vn


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.