smusevic@2: function xx = pinv_2_fast(A,b,Q,N) smusevic@2: smusevic@2: b_mat = repmat(reshape(b,[Q,1,1,N]),[1 Q-1 2 1]); smusevic@2: smusevic@2: AA = zeros(Q,(Q-1),2,N); smusevic@2: A1= zeros(Q,(Q-1),2,N); smusevic@2: vct_idx = 1:Q; smusevic@2: for q=1:Q smusevic@2: vct_Q = vct_idx([1:q-1,q+1:Q]); smusevic@2: A1(q,:,1,:) = shiftdim(A(vct_Q, 2,:),-1); smusevic@2: AA(q,:,1,:) = repmat(A(q,1,:),(Q-1),1) .* A(vct_Q,2,:); smusevic@2: smusevic@2: A1(q,:,2,:) = A(vct_idx([1:q-1,q+1:Q]), 1,:); smusevic@2: AA(q,:,2,:) = repmat(A(q,2,:),(Q-1),1) .* A(vct_Q,1,:); smusevic@2: end smusevic@2: A2 = (cat(3,conj(AA(:,:,1,:)-AA(:,:,2,:)) .* A1(:,:,1,:),conj(AA(:,:,1,:) - AA(:,:,2,:)) .* A1(:,:,2,:))); smusevic@2: A3 = shiftdim(sum(sum(AA(:,:,2,:) .* conj(AA(:,:,1,:)-AA(:,:,2,:)))),3); smusevic@2: A_nrm = [-A3, A3]; smusevic@2: xx = shiftdim(sum(sum(A2 .* b_mat)), 2).' ./ A_nrm;