decrease num of for loops

16 views (last 30 days)
Uros
Uros on 3 Nov 2012
Hi
Can you help me to write that 4 for loops with just 1 for loop?
I really need to speed up my program and that is the biggest problem.
for u=0:7,
for v=0:7,
tmp = 0;
for x=0:7,
for y=0:7,
tmp = tmp + vhod(y+1, x+1) * cosd( (2*x + 1)*u*180/16 ) * cosd( (2*y + 1)*v*180/16 );
end
end
izhod(v+1, u+1) = round(0.25 * C(u+1) * C(v+1) * tmp);
end
end

Accepted Answer

Matt Fig
Matt Fig on 3 Nov 2012
Edited: Matt Fig on 3 Nov 2012
This should be much faster:
D = (2*(0:7).'+1)*180/16; % No need to do this over and over.
for u=0:7
for v=0:7
tmp = vhod.*(cosd(D*v) * cosd(D.'*u));
izhod2(v+1, u+1) = C(u+1) * C(v+1) * sum(tmp(:));
end
end
izhod2 = round(0.25 *izhod2); %compare to izhod... equal!
  5 Comments
Uros
Uros on 3 Nov 2012
:( i can't do it, in this case there is also C related to u and v and i'm a bit confused.
btw this is the formula i need to speed up: http://shrani.si/f/3j/bC/gP6Ixdg/brez-naslova.png
with: C = [1 / sqrt(2), 1, 1, 1, 1, 1, 1, 1];
Uros
Uros on 3 Nov 2012
still no success
current code:
for u=0:7,
for v=0:7
tmp = vhod.*(cosd((2*u+1)*(0:7)*180/16) * cosd((2*v+1)*(0:7)'*180/16) ).*(C(1:8) * C(1:8)');
izhod(v+1, u+1) = sum(tmp(:));
end
end
izhod = ceil(0.25 * izhod);
:(

Sign in to comment.

More Answers (1)

José-Luis
José-Luis on 3 Nov 2012
old_v = 0;
for ii = 1:8*8*8*8
[u v x y] = ind2sub([8 8 8 8],ii);
u = u-1; v = v-1; x = x-1; y = y-1;
if old_v ~= v
tmp = 0;
end
%do your stuff
old_v = v;
end
  1 Comment
Matt Fig
Matt Fig on 3 Nov 2012
Uros comments:
"hm i can't really understand how it works
now i have:
tmp = 0;
old_v = 0;
for ii = 1:8*8*8*8
[u v x y] = ind2sub([8 8 8 8],ii);
u = u-1; v = v-1; x = x-1; y = y-1;
if old_v ~= v
tmp = 0;
end
tmp = tmp + vhod(y+1, x+1) * cosd( (2*x + 1)*u*180/16 ) * cosd( (2*y + 1)*v*180/16 );
old_v = v;
end
but i don't know where and how to put that line:
izhod(v+1, u+1) = round(0.25 * C(u+1) * C(v+1) * tmp);"

Sign in to comment.

Categories

Find more on Historical Contests in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!