两个点集的距离,SVD的实施方法

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);为去重心后的平方求和
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值