A = [1.0 2.0; 3.0 4.0]
d = eig(A)
とすると、対角化されて固有値が求まる。
d, v = eig(A)
とすると、vに固有ベクトルが入ってくる。(dだけの場合よりも遅い)
Matlabとほぼ同じ事が出来るGNU Octaveで対角化してたんだけど、
計算量がどのくらいのアルゴリズムを使ってるか知りたくなったので、下のようなPythonスクリプトで
適当に問題を生成して、1辺のサイズと経過時間を調べてみた。
import random
N = 1000
print "A = [",
for i in range(N):
for j in range(N):
print random.random(),
print ";",
print "]"
print "d = eig(A)"
(実験環境: Xeon 5140 @ 2.33GHz)
Excelで近似曲線とかを出してみたら、大体O(x
4)のオーダーらしい。
あと、N<128ではどうやらアルゴリズムが違うらしい。
[an error occurred while processing this directive]