GSL線形代数ルーチン読解: ハウスホルダー変換(2) | ぽんのブログ

ぽんのブログ

自分用の備忘録ブログです。書いてある内容、とくにソースは、後で自分で要点が分かるよう、かなり簡略化してます(というか、いい加減)。あまり信用しないように(汗

前回、長さの等しい2つのベクトル xy の鏡映変換であるハウスホルダー変換の説明をしました。

今回はベクトル y として x1 軸上のベクトルを考えます。



xy は長さが等しくなければならなかったので y の第一成分は x の長さ(ノルム)に等しくなっています。
つまり、任意のベクトル x を第一軸上のベクトルへ変換してしまおうという訳です。

このようなベクトルは2通り存在し得ます。2次元萌えの場合

Householder変換(3)


この図の様に2通りの y の候補が出てきます。
で、一般には、 x の第一軸成分の符号と逆符号のものが選ばれます。
つまり



と置いた時



として   を選びます。
Householder変換にはベクトル x - y の長さ(ノルム)の逆数を掛けるところがありますが、この長さがなるべく大きくなる(0 にならない)よう x の第一軸成分と逆符号(逆方向)の鏡映が選ばれます。

そうすると前回の式(1)は、上の y を用いると

式(1)’


となります。

ここで

式(2)


です。

式(1)’の分母は



ここで β^2 = ( -sign (α) | x | )^2 = | x |^2、 e1 ・ x = x1 から







となります。
こうして式(1)’は

式(3)


となります。
ここで以下の様な ν を考えます。

式(4)


式(2)から、最右辺の様に ν は第一成分が 1 のベクトルになります。
この ν を用いて式(3)は

式(5)


となります。
この ν をハウスホルダーベクトルと言うそうです。

GSL の ハウスホルダー変換の関数

  double   gsl_linalg_householder_transform (gsl_vector *v)

は、入力されたベクトル gsl_vector *v から式(4)に従ってハウスホルダーベクトルを求め、同時に式(5)の τ の値を返します。