54 lines
1.3 KiB
Matlab
Executable File
54 lines
1.3 KiB
Matlab
Executable File
%
|
|
% PURPOSE : TLS solution for AX = B based on alternative projection
|
|
%
|
|
% ARGUMENTS :
|
|
%
|
|
% A : observation of A
|
|
% B : observation of B
|
|
%
|
|
% OUTPUTS :
|
|
%
|
|
% X : TLS solution for X
|
|
%
|
|
%**********************************************************************************************
|
|
% EURECOM - All rights reserved
|
|
%
|
|
% AUTHOR : Xiwen JIANG, Florian Kaltenberger
|
|
%
|
|
% DEVELOPMENT HISTORY :
|
|
%
|
|
% Date Name(s) Version Description
|
|
% ----------- ------------- ------- ------------------------------------------------------
|
|
% Mai-05-2014 X. JIANG 0.1 creation of code
|
|
%
|
|
% REFERENCES/NOTES/COMMENTS :
|
|
%
|
|
% - none.
|
|
%
|
|
%**********************************************************************************************
|
|
|
|
function [X_est A_est B_est] = f_tls_ap(A,B)
|
|
|
|
%** initlisation **
|
|
e_new = 0;
|
|
e_old = 1e14;
|
|
e_thr = 1e-5; %error threshold: what if the error cannot fall down under the error threshold
|
|
X_est = eye(size(A,2));
|
|
A_est = A;
|
|
|
|
%** alternative projection **
|
|
while(abs(e_new-e_old)>e_thr)
|
|
e_old = e_new;
|
|
|
|
% optimise X_est
|
|
X_est = (A_est'*A_est)\A_est'*B;
|
|
|
|
%optimise A_est
|
|
A_est = B*X_est'/(X_est*X_est');
|
|
|
|
e_new = norm(A_est*X_est-B)^2+norm(A_est-A)^2;
|
|
end
|
|
B_est = A_est*X_est;
|
|
|
|
end
|