Anybody knows how can i optimize this? Thanks <3!
function filter()
r=[cos(c) -sin(c);
sin(c) cos(c)];
for i = 1 : n2
for j = 1 : n1
h(i,j) = magic(r(1),std)*magic(r(2),std);
end
end
function y = magic(r,s)
y = exp(-r^2));

 Réponse acceptée

Roger Stafford
Roger Stafford le 9 Avr 2015

2 votes

You have set std1 and std2 to equal values. Provided you do that, the result in 'h' is independent of the value 'c' and can be vectorized as:
n1 = 10;
n2 = 3;
s = 2
h = exp(-(((1-n2)/2:(n2-1)/2)').^2/(2*s^2))*...
exp(-(((1-n1)/2:(n1-1)/2)).^2/(2*s^2))/s^2/(2*pi);
The code can also be vectorized with unequal values of std1 and std2, but is somewhat more complicated. Do you wish to see that?

Plus de réponses (1)

amelia_3
amelia_3 le 9 Avr 2015
Modifié(e) : amelia_3 le 9 Avr 2015

0 votes

Thank you!! :) Actually, I'm trying to make it with different values too. However, I don't understand your solution neither :/

1 commentaire

Roger Stafford
Roger Stafford le 10 Avr 2015
Modifié(e) : Roger Stafford le 10 Avr 2015
For unequal std1 and std2 a vectorized form would be:
[J,I] = meshgrid((1-n1)/2:(n1-1)/2,(1-n2)/2:(n2-1)/2);
cc = cos(c); sc = sin(c);
h = exp(-(cc*J-sc*I).^2/(2*std1^2)-(sc*J+cc*I).^2/(2*std2^2))...
/(std1*std2*2*pi);
To show that if std1 = std2, then the result is independent of c, the argument of exp above becomes:
-(cc*J-sc*I).^2/(2*std^2)-(sc*J+cc*I).^2/(2*std^2) =
(-(cc^2+sc^2)*J^2+(2*cc*sc-2*sc*cc)*I*J-(sc^2+cc^2)*I^2)/(2*std^2) =
-(J^2+I^2)/(2*std^2)
which is indeed independent of c.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by