How to vectorize these codes
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (2)
Jan
el 5 de Nov. de 2012
Editada: Jan
el 6 de Nov. de 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?
Robert Cumming
el 5 de Nov. de 2012
Editada: Robert Cumming
el 5 de Nov. de 2012
help isnan
4 comentarios
Robert Cumming
el 6 de Nov. de 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.
Ver también
Categorías
Más información sobre Multidimensional Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!