Matlabにはprincompという主成分分析を計算する関数があるけれど、Octaveには見あたらなかったので、英語版Wikipediaに書かれていたやり方どおりに作ってみました。
[pc, score, latent] = princomp(A);
みたいに使えます。pcが主成分の係数、scoreが主成分得点、latentが各主成分の分散値(合計値が100%になるように変換すると寄与率)となります。
function [coeff, score, latent] = princomp(X) B = X - repmat(mean(X), size(X,1), 1); C = cov(B); [V,D] = eig(C); [s, index] = sort(diag(D), 'descend'); coeff = V(:,index); latent = s; score = B * coeff;
同じデータに対してMatlabのprincompと同じ結果が出たので、複素数になると自信ないですが、とりあえず実数の範囲では大丈夫そう。