# How to vectorize these codes

1 vue (au cours des 30 derniers jours)
Xianjie le 5 Nov 2012
Dear all,
these days i am dosing some modification on my code with vectorization. For the following codes:
function y=gam(a,m,n)
% cos(m*pi*x/a)*sin(n*pi*x/a)
if m==0
if n==m
y=0;
else
y=-a*(-1+(-1)^n)/(n*pi);
end
else
if n==m
y=0;
else
y=a*n*(-1+(-1)^(m+n))/(pi*(m^2-n^2));
end
end
I vectorlize it, but when m equal to n, the results is NAN. So please help me on vectorlizing it.
Thank you.
[Code formated, Jan - Please format your code in the future, thanks]
##### 0 commentairesAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens

Connectez-vous pour commenter.

### Réponses (2)

Jan le 5 Nov 2012
Modifié(e) : Jan le 6 Nov 2012
There is no loop and therefore it is not trivial to guess, which operation you want to be vectorized.
[EDITED] Now your problem got clear, thanks.
function y = gam(a,m,n)
y = zeros(size(m));
index = (m == 0 & n ~= m);
y(index) = -a*(-1+(-1).^n(index)) ./ (n(index)*pi);
index = (m ~= 0 & n ~= m);
y(index) = a.*n(index).*(-1+(-1).^(m(index)+n(index))) ./ ...
(pi*(m(index).^2 - n(index) .^ 2));
end
Not tested because I cannot run Matlab currently.
But this is a guess only. I cannot conclude what the vectorized version of "n == m" should be. Is it "ismember(n, m)" or "n == m" or "any(n == m, 2)" etc?
##### 1 commentaireAfficher AucuneMasquer Aucune
Xianjie le 6 Nov 2012
m and n are matrix. So i want to vectorize this code.

Connectez-vous pour commenter.

Robert Cumming le 5 Nov 2012
Modifié(e) : Robert Cumming le 5 Nov 2012
help isnan
##### 4 commentairesAfficher 3 commentaires plus anciensMasquer 3 commentaires plus anciens
Robert Cumming le 6 Nov 2012
m = [1 2 0 4 5];
n = [3 3 0 3 3];
y = m./n
y(isnan(y)) = 0
No for loop required - as I said use logical indexing and isnan.

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!