% PROCRUSTES   Procrustes解析
%
% D = PROCRUSTES(X, Y) は、行列 X の点ともっとも良く一致するように、
% 行列 Y の点の(変換、反射、直交回転、スケーリングなどの)線形変換を
% 定義します。"適合度"の基準は、誤差の二乗和です。PROCRUSTES は、D に
% この相違点の測定値を最小化した値を返します。D は、以下で与えられる 
% X の大きさの基準によって標準化されたものです。
%
%    sum(sum((X - repmat(mean(X,1), size(X,1), 1)).^2, 1))
%
% すなわち、X の中心からの各要素の二乗和です。しかしながら、X が同じ点
% の繰り返しを含む場合、誤差の二乗和は標準化されません。
%
% X と Y は点(行)の同じ数をもつと仮定され、PROCRUSTES は、Y の i番目の
% 点と X の i番目の点を一致させます。Y の点は、X の点より小さい次元(列
% の数) をもつことができます。この場合、PROCRUSTES は、必要なときに
% Y にゼロの列を加えます。
%
% [D, Z] = PROCRUSTES(X, Y) は、変換した Y の値も出力します。
%
% [D, Z, TRANSFORM] = PROCRUSTES(X, Y) は、Y を Z に写像した変換の内容も
% 出力します。TRANSFORM は、以下のフィールドをもつ構造体です。:
%    c:  平行移動成分
%    T:  直交回転と反射成分
%    b:  倍率成分
% これは Z = TRANSFORM.b * Y * TRANSFORM.T + TRANSFORM.c となります。
%
% 例題:
%
%    % 2つの次元のいくつかのランダムな点を作成します。
%    X = normrnd(0, 1, [10 2]);
%
%    % これらのいくつかの点に、回転、倍率、平行移動の変換を行い、
%    % ノイズを加えます。
%    S = [0.5 -sqrt(3)/2; sqrt(3)/2 0.5]; % 60度回転
%    Y = normrnd(0.5*X*S + 2, 0.05, size(X));
%
%    % Y を X に適合させ、オリジナルの X と Y と変換された Y を表示
%    % します。
%    [d, Z, tr] = procrustes(X,Y);
%    plot(X(:,1),X(:,2),'rx', Y(:,1),Y(:,2),'b.', Z(:,1),Z(:,2),'bx');
%
%   参考 FACTORAN, CMDSCALE.


%   Copyright 1993-2004 The MathWorks, Inc.
