y(N) = A y(N-1) = AN y
= c1a1Nx1
+ c2a2Nx2 +
... + cnanNxn
(例題P3−1)以下のプログラムは 4 x 4 の行列を matrix.d から、4行のベクトルを vector.d から読み込んで、冪乗法のアルゴリズムに従って、最大固有値と固有ベクトルの収束性をみるプログラムである。作成して実行してみましょう。
( 5 2 3 4 )
( 2 5 4 3 )
A = ( 3 4 5 2 )
( 4 3 2 5 )
b = 11.733333, x = 0.485516 0.514076 0.485516
0.514076
b = 13.990212, x = 0.497955 0.502037 0.497955
0.502037
b = 13.999800, x = 0.499708 0.500291 0.499708
0.500291
b = 13.999996, x = 0.499958 0.500042 0.499958
0.500042
b = 14.000000, x = 0.499994 0.500006 0.499994
0.500006
b = 14.000000, x = 0.499999 0.500001 0.499999
0.500001
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
b = 14.000000, x = 0.500000 0.500000 0.500000
0.500000
(課題P3−1)
上のプログラムを作成し、matrix.d と vector.d
を読み込んで、実行しなさい。初期値を変えても固有値と固有ベクトルが求まるか確かめなさい
(課題P3−2)
得られた固有値と固有ベクトルが、もとの固有値問題を満足するか確かめるよう、プログラムを拡張しなさい。すなわち行列 A とベクトル
x の積 A x と ベクトル x に固有値をかけたもの a x が一致するか確かめる。
(課題P3−3)
上の例題プログラムでは、行列ベクトルの積をkmax=20 回繰り返す。b
の値を一回前とのものと比較して、十分違いが小さくなったら繰り返しをやめて(アルゴリズムの5)収束した固有値と固有ベクトルを出力するプログラムを作
成し、いくつかの行列と初期値について試してみなさい。収束の仕方を調べなさい。 (ヒント) プログラム中の /* 内積 */
の部分の b の値を新しい変数に代入しておく。そして、新しく計算された b の値と比較する。
(余裕がある人へ)
(課題P3−4)
n x n の実対称行列を入力すると、その絶対値の最大固有値と対応する固有ベクトルを出力する関数を作成せよ。
(さらに余裕がある人へ。成績評価にはあまり影響しない課題)
上の例題では、行列 A の最大固有値 a1 と対応する固有ベクトル x1 を求めた。ここでは、2番目に大きい固有値と対応する固有ベクトルを求める方法について考える。新しく行列
B = A - a1 x1 x1T
とすると、 B の固有値は、 0, a2, a3, ..., anとなり、対応する固有ベクトルは x1, x2, x3, ... , xn となる。これを用いて2番目に大きい固有値 a2 と対応する固有ベクトル x2 を冪乗法により求めることができる。
(課題P3−5)
例題プログラムに
B = A - a1 x1 x1T
を作って2番目に大きい固有値と固有ベクトルを求めるプログラムを作成し、実行しなさい。
(課題P3−6)
4 x 4 の行列の全ての固有値と固有ベクトルを求めるプログラムを作成し、 matrix.d について実行しなさい。