lsmat_v001

function [LSM LSM_R] =lsmat(H,R, mtd)
if (mtd==0)
    R_inv=inv(R);
    LSM_R=inv(H'*R_inv*H);
    LSM=LSM_R*H'*R_inv;    
elseif (mtd==1)
    [u,s,v]=svd(H);
    T2=u(:,1:size(H,2))';
    T1=u(:,size(H,2)+1:size(H,1))';
    
    mx_a=inv(T1*R*T1');
    mx_b=inv(T2*H);
    LSM=mx_b*(T2-T2*R*T1'*mx_a*T1);
    LSM_R=LSM*R*LSM';
elseif(mtd==2)
    [u,s,v]=svd(R);
    Ht=u'*H;
    Rt=u'*R*u;
    in=find(diag(Rt)<1e-7, 1, 'first');
    if (isempty(in))
        in=size(H,1);
    else
        in=in-1;
    end
    Htr=Ht(1:in,:);
    Rtr_inv=inv(Rt(1:in,1:in));
    LSM_R=inv(Htr'*Rtr_inv*Htr);
    LSM=LSM_R*Htr'*Rtr_inv*u(:,1:in)';    
end