ル・ヴェリエ、ファデーエフ法


中野先生の固有値の論文を順々に読んでいったら、ル・ヴェリエ、ファデーエフ法というのが出てきました。
これがとても優秀のようです。
とりあえず転載。

NB. Leverrier-Faddeev Algorithm
char=: 3 : 0
X=.I=.=@i.n=.#y[p=.1
for_k. >:i.n do.
 X=.y +/ . * X
 p=.p,pk=.-k%~+/(<0 1)|:X
 X=.X+pk*I
end.
.p
) lf=:>@{:@p.@char

ためしに使ってみます。

   ]a=:3 3$3 0 0 0 2 _5 0 1 _2
3 0  0
0 2 _5
0 1 _2
   lf a
3 0j1 0j_1
   ]b=:3 3$ 0 1 1 1 0 1 1 1 0
0 1 1
1 0 1
1 1 0
   lf b
2 _1 _1

中野論文に出ていた11次実対称帯行列で試してみます。

   f1111=: , 0 ".] ;._2 (0 : 0)
 1 _2  1  0  0  0  0  0  0  0  0
_2  5 _4  1  0  0  0  0  0  0  0 
 1 _4  6 _4  1  0  0  0  0  0  0
 0  1 _4  6 _4  1  0  0  0  0  0
 0  0  1 _4  6 _4  1  0  0  0  0
 0  0  0  1 _4  6 _4  1  0  0  0
 0  0  0  0  1 _4  6 _4  1  0  0
 0  0  0  0  0  1 _4  6 _4  1  0
 0  0  0  0  0  0  1 _4  6 _4  1
 0  0  0  0  0  0  0  1 _4  5 _2
 0  0  0  0  0  0  0  0  1 _2  1
)
   lf 11 11$f1111
15.2692 13.2436 10.3706 7.24053 4.412 2.26237 0.913734 0.253526 0.0344625 0 0

問題無さそうです。一瞬で解答が出ました。