A = X0’ * Y0;
[L, D, M] = svd(A);
T = M * L’;
if isempty(doReflection) % ‘best’
% Let the data decide if a reflection is needed.
else
haveReflection = (det(T) < 0);
% If we don’t have what was asked for …
if (doReflection ~= haveReflection)
% … then either force a reflection, or undo one.
M(:,end) = -M(:,end);
D(end,end) = -D(end,end);
T = M * L’;
end
end
% The minimized unstandardized distance D(X0,b*Y0*T) is
% ||X0||^2 + b^2*||Y0||^2 - 2*b*trace(T*X0'*Y0)
T是一个正交阵,所以求方差时
TA=ML'LDM'
所以下面的迹相等
traceTA = sum(diag(D)); % == trace(sqrtm(A'*A)) when doReflection is 'best'
sqrtm矩阵开平方
if doScaling
% The optimum scaling of Y.
b = traceTA * normX / normY;
% The standardized distance between X and b*Y*T+c.
d = 1 - traceTA.^2;
标准的距离,为什么后面的部分有意义?
if nargout > 1
Z = normX*traceTA * Y0 * T + repmat(muX, n, 1);
end
else % if ~doScaling
b = 1;
% The standardized distance between X and Y*T+c.
d = 1 + ssqY/ssqX - 2*traceTA*normY/normX;
ssqX = sum(X0.^2,1);为去重心后的平方求和