eigの速度

MATLABでeigの速度がどの程度なのか少し気になっていたので,
適当に時間を計測してみた.

% eigの時間測定
clear all;
nLoop = 10;
sizeM = 2.^(5:12);

nSizeM = numel(sizeM);
times = zeros(nSizeM, nLoop);

for iSizeM = 1:nSizeM
    disp(sizeM(iSizeM));
    for iLoop = 1:nLoop
        m = rand(sizeM(iSizeM));
        m = (m + m.')/2;        
        tic;
        [a,b] = eig(m);
        t=toc;
        times(iSizeM, iLoop) = t;
    end % loop    
end % size

% 出力
figure(1);loglog(mean(times,2));

f:id:nosyan:20120611210915p:image

このグラフよりオーダはO(x^a).

結論
遅い.行列サイズは極力小さくしましょう.