⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pttls.m

📁 一个很有用的EM算法程序包
💻 M
字号:
function [Xr, Sr, rho, eta] = pttls(V, d, colA, colB, r)%PTTLS Truncated TLS regularization with permuted columns.%%    Given matrices A and B, the total least squares (TLS) problem%    consists of finding a matrix Xr that satisfies%%                (A+dA)*Xr = B+dB.%%    The solution must be such that the perturbation matrices dA%    and dB have minimum Frobenius norm rho=norm( [dA dB], 'fro')%    and each column of B+dB is in the range of A+dA [1].%  %    [Xr, Sr, rho, eta] = PTTLS(V, d, colA, colB, r) computes the%    minimum-norm solution Xr of the TLS problem, truncated at rank r%    [2]. The solution Xr of this truncated TLS problem is a%    regularized error-in-variables estimate of regression%    coefficients in the regression model A*X = B + noise(S). The%    model may have multiple right-hand sides, represented as columns%    of B.%%    As input, PTTLS requires the right singular matrix V of the%    augmented data matrix C = U*diag(s)*V' and the vector d=s.^2 with%    the squared singular values. Only right singular vectors V(:,j)%    belonging to nonzero singular values s(j) are required.  Usually,%    the first n columns of the augmented data matrix C correspond to%    the n columns of the matrix A, and the k last columns to the k%    right-hand sides B, so that the augmented data matrix is of the%    form C=[A B]. PTTLS allows a more flexible composition of the%    data matrix C: the columns with indices colA correspond to%    columns of A; the columns with indices colB correspond to columns%    of B.%%    The right singular vectors V and the squared singular values d%    may be obtained from an eigendecomposition of the matrix C'*C = v%    * d * v', which, for centered data, is proportional to the sample%    covariance matrix.%%    PTTLS returns the rank-r truncated TLS solution Xr and the matrix%    Sr = dB'*dB, which is proportional to the estimated covariance%    matrix of the residual dB. Also returned are the Frobenius norm %%                    rho = norm([dA dB], 'fro') %%    of the residuals and the Frobenius norm %%                    eta = norm(Xr,'fro') %%    of the solution matrix Xr.%  %    If the truncation parameter r(1:nr) is a vector of length nr,%    then Xr is a 3-D matrix with%    %         Xr(:,:, 1:nr) = [ Xr(r(1)), Xr(r(2)), ..., Xr(r(nr)) ] .%%    The covariance matrix estimate Sr has an analogous structure, and%    the residual norm rho(1:nr) and the solution norm eta(1:nr) are%    vectors with one element for each r(1:nr).%%    If r is not specified or if r > n, r = n is used.%     References: %     [1] Van Huffel, S. and J.Vandewalle, 1991:%         The Total Least Squares Problem: Computational Aspects%         and Analysis. Frontiers in Mathematics Series, vol. 9. SIAM.%     [2] Fierro, R. D., G. H. Golub, P. C. Hansen and D. P. O'Leary, 1997:%         Regularization by truncated total least squares, SIAM%         J. Sci. Comput., 18, 1223-1241%     [3] Golub, G. H, and C. F. van Loan, 1989: Matrix%         Computations, 2d ed., Johns Hopkins University Press,%         chapter 12.3   error(nargchk(2,5,nargin))          % check number of input arguments   [na,ma]   = size(V);   nd        = length(d);  if nd ~= prod(size(d))    error('Squared singular values d must be given as vector.')  end  if ma < nd    error(['All right singular vectors with nonzero singular value' ...	   ' are required.'])  end  d         = d(:);                   % make sure d is column vector    if nargin == 2    n       = na-1;	              % default number of columns of A    k       = 1;                      % default number of right-hand sides    colA    = 1:n;                    % take first n columns of [A B] as A     colB    = na;                     % take last column of [A B] as B  else    n       = length(colA);           % number of columns of A (number of variables)    k       = length(colB);           % number of right-hand sides     if n + k ~= na      error('Impossible set of column indices.')    end  end	       if (nargin < 5)     r = n;                            % default truncation of TLS   end    nr = length(r);                     % number of truncation parameters  if any(r < 1)    error('Impossible truncation parameter.')  end    ir = find(r > n);  if ~isempty(ir)    r(ir) = n;    warning('Truncation parameter lowered.')  end        % initialize output variables  Xr = zeros(n, k, nr);  Sr = zeros(k, k, nr);  if (nargout > 2)    rho = zeros(nr,1);  end  if (nargout==4)     eta = zeros(nr,1);   end    % compute a separate solution for each r  for ir=1:nr    rc          = r(ir);    V11         = V(colA, 1:rc);    V21         = V(colB, 1:rc);    Xr(:,:,ir)  = (V11 / (V11'*V11)) * V21';        % estimated covariance matrix of residuals dB0'*dB0 (up to a    % scaling factor)    V22         = V(colB, rc+1:nd);     Sr(:,:,ir)  = V22 * (repmat(d(rc+1:nd), 1, k) .* V22');        % alternative formula when all left singular vectors are given:    % V12         = V(colA, rc+1:end);    % Xr(:,:,ir)  = -V12/V22;     if (nargout > 2)       % residual norm = norm( [dA0 dB0], 'fro')      rho(ir)   = sqrt(sum(d(rc+1:nd)));         end        if (nargout == 4)      % solution norm = norm( Xr, 'fro')      eta(ir)   = norm(Xr(:,:,ir), 'fro');     end  end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -