% CMDSCALE   古典的多次元尺度構成法
%
% Y = CMDSCALE(D) は、n×n の距離行列 D を取り込み、n×p の配置行列 
% Y を返します。Y の行は、いくつかの p < n に対して p次元空間内の n 点
% の座標です。D がEuclidean距離行列のとき、これらの点の間の距離は、
% D によって与えられます。p は、それぞれの点の間の距離が D によって
% 与えられるような n 点を組み込むことのできるもっとも小さい空間の次元
% です。
% 
% [Y,E] = CMDSCALE(D) は、Y*Y' の固有値も出力します。D が Euclidean
% のとき、E の最初の p 要素は、正で、残りはゼロです。E の最初の k 要素
% が、残りの (n-k) よりも非常に大きい場合、それぞれの点の間の距離が D 
% に近い k 次元の点として Y の最初の k 列 を使うことができます。これに
% より、例えば k == 2 のように視覚化するための次元の削減を行うことが
% できます。
% 
% D は、Euclidean 距離行列である必要はありません。もし Euclidean で
% ないか、またはより一般的な非類似行列の場合、E のいくつかの要素は負に
% なり、CMDSCALE は正の固有値の数を選択します。この場合、E の負の要素
% の大きさ p に対し、小さい場合にのみ、p または、より少ない次元への
% 削減は、D に十分な近似を与えます。
% 
% フルサイズの非類似行列か、PDIST による出力のような上三角ベクトル形式
% のどちらでも D に指定することができます。フルサイズの非類似行列は
% 実数で対称でなければなりません。また、対角要素がゼロで、どの場所にも
% 正の要素をもっていなければなりません。上三角行列形式の非類似行列は、
% 実数で、正の入力でなければなりません。対角が1で他のすべての要素が
% 1より小さいフルサイズの非類似行列を D に指定することも可能です。
% CMDSCALE は、Y に返された各点の間の距離が、sqrt(1-D) に一致するか、
% それに近づくように、類似行列を非類似行列に変換します。他の変換法を
% 用いたい場合は、CMDSCALE を呼び出す前に類似行列を変換しておくことも
% できます。
%
% 例題:
%
%      % 3Dに"近い"けれども、4Dであるいつくかの点を距離だけに次元を
%      % 減らす
%      X = [ normrnd(0,1,10,3) normrnd(0,.1,10,1) ];
%      D = pdist(X, 'euclidean');
%
%      % 点の間の距離から配置を計算
%      [Y e] = cmdscale(D);
%      dim = sum(e > eps^(3/4)) % 4であるが、その4番目は小さい
%      maxerr2 = max(abs(pdist(X) - pdist(Y(:,1:2)))) % 悪い復元
%      maxerr3 = max(abs(pdist(X) - pdist(Y(:,1:3)))) % 良い復元
%      maxerr4 = max(abs(pdist(X) - pdist(Y))) % 正確な復元
%
%      D = pdist(X, 'cityblock'); % D が Euclidean ではない場合
%      [Y e] = cmdscale(D);
%      min(e) % 大きな負の値がひとつある
%      maxerr = max(abs(pdist(X) - pdist(Y))) % 悪い復元
%
%   参考 MDSCALE, PDIST, PROCRUSTES.


%   Copyright 1993-2004 The MathWorks, Inc. 
