Matlab

ひょんのことから使う羽目に。
「MatlabなんてC書けない人が使うんでしょ」て思っていた昔が懐かしい。 バージョンごとに仕様あんま変えないで欲しい。

tips

コマンドラインで使いたい!

MatlabのGUIはJavaで重い! 計算はCUIで十分! という奇特な人向けのtips。
しかしグラフ保存の方法が分からないので全然役立たず。分かれば追加します。

Octaveで対角化・固有値/固有ベクトル計算

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(x4)のオーダーらしい。 あと、N<128ではどうやらアルゴリズムが違うらしい。