📄 pttls.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 + -