smusevic@2
|
1 function xx = pinv_2_fast(A,b,Q,N)
|
smusevic@2
|
2
|
smusevic@2
|
3 b_mat = repmat(reshape(b,[Q,1,1,N]),[1 Q-1 2 1]);
|
smusevic@2
|
4
|
smusevic@2
|
5 AA = zeros(Q,(Q-1),2,N);
|
smusevic@2
|
6 A1= zeros(Q,(Q-1),2,N);
|
smusevic@2
|
7 vct_idx = 1:Q;
|
smusevic@2
|
8 for q=1:Q
|
smusevic@2
|
9 vct_Q = vct_idx([1:q-1,q+1:Q]);
|
smusevic@2
|
10 A1(q,:,1,:) = shiftdim(A(vct_Q, 2,:),-1);
|
smusevic@2
|
11 AA(q,:,1,:) = repmat(A(q,1,:),(Q-1),1) .* A(vct_Q,2,:);
|
smusevic@2
|
12
|
smusevic@2
|
13 A1(q,:,2,:) = A(vct_idx([1:q-1,q+1:Q]), 1,:);
|
smusevic@2
|
14 AA(q,:,2,:) = repmat(A(q,2,:),(Q-1),1) .* A(vct_Q,1,:);
|
smusevic@2
|
15 end
|
smusevic@2
|
16 A2 = (cat(3,conj(AA(:,:,1,:)-AA(:,:,2,:)) .* A1(:,:,1,:),conj(AA(:,:,1,:) - AA(:,:,2,:)) .* A1(:,:,2,:)));
|
smusevic@2
|
17 A3 = shiftdim(sum(sum(AA(:,:,2,:) .* conj(AA(:,:,1,:)-AA(:,:,2,:)))),3);
|
smusevic@2
|
18 A_nrm = [-A3, A3];
|
smusevic@2
|
19 xx = shiftdim(sum(sum(A2 .* b_mat)), 2).' ./ A_nrm;
|