decrease num of for loops

15 visualizzazioni (ultimi 30 giorni)
Uros
Uros il 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

Risposta accettata

Matt Fig
Matt Fig il 3 Nov 2012
Modificato: Matt Fig il 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 Commenti
Uros
Uros il 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 il 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);
:(

Accedi per commentare.

Più risposte (1)

José-Luis
José-Luis il 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 Commento
Matt Fig
Matt Fig il 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);"

Accedi per commentare.

Categorie

Scopri di più su Historical Contests in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by