Info
This question is closed. Reopen it to edit or answer.
Can any one explain me how to apply vectorized operation on the outer for loop of the given program?
3 views (last 30 days)
Show older comments
a=[1+1i 2+2i 3+3i 4+4i 5+5i 6+6i 7+7i 8+8i 9+9i 1+1i 2+2i 3+3i 4+4i 5+5i 6+6i 7+7i 8+8i 9+9i];
for m=1:6
m=m-1;
k=1:1:4;
out_1(m+1)=(sum((a(k+m)).*(conj(a(k+12+m)))))/12;
end
2 Comments
Alexandra Harkai
on 17 Nov 2016
Does this code not give you an indexing error for a(k+12+m) after the 3rd loop? (k+12+3 = 1:4+12+3=16:19 and a has only 18 elements)
Answers (1)
Guillaume
on 17 Nov 2016
As Alexandra pointed out, your example is indexing past the end of the array.
Assuming a sufficiently large array, the following would work:
%input: %a, a vector with enough elements
%e.g:
a = repmat((1:9).*(1+1i), 1, 3)
m = 1:6; %row vector
k = (0:3).'; %column vector
assert(numel(a) >= max(m) + max(k) + 12, 'Not enough elements in a');
%in R2016b:
out = sum(a(m+k) .* conj(a(m+k+12))) / 12;
%prior to R2016b:
%indices = bsxfun(@plus, m, k);
%out = sum(a(indices) .* conj(a(indices+12))) / 12;
1 Comment
This question is closed.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!