Why is this line so inefficient

3 visualizaciones (últimos 30 días)
John Gilmore
John Gilmore el 26 de Jul. de 2022
Comentada: David Hill el 27 de Jul. de 2022
I have a very simple equation that I'm coding in MATLAB that I wouldn't think should be taking as much time as it is. The initial line is in a for loop so I vectorized the problem and that turned out to be even slower (which I was pretty surprised by). Does anyone see anything obvious that I'm not considering for why this is so slow? Typically values for n and m are between 0-10
% Rnm = zeros(size(rho));
% MaximumExponent = (n-m)/2;
% s = 0:MaximumExponent;
% numerator = (-1) .^ s .* factorial(n-s);
% denominator = factorial(s) .* factorial((n+m) / 2-s) .* factorial((n-m) / 2-s);
% Rnm = sum((numerator ./ denominator) .* rho .^ (n-2 .* s), 2);
Rnm2 = zeros(size(rho));
for s=0:(n-m)/2
numerator = (-1)^s * factorial(n-s);
denominator = factorial(s)*factorial((n+m)/2-s)*factorial((n-m)/2-s);
Rnm2 = Rnm2 + (numerator / denominator) * rho.^(n-2*s);
end % for s statement
Here is a profile for the runtime...
EDIT: I should probably also add a couple more details on some things. rho will be a column vector of ~500,000 elements. I imagine the size of rho is alone the reason that most of this takes so long, but it still seems a bit abnormally long to me.
EDIT 2: Should probably include my system details...running Windows 10 Pro, 11th Gen Intel Core i5-1135G7 @ 2.4GHz, 16GB RAM. Nothing to fantastic, but not the worst PC in the world. That's why I'd think this should be running faster...
  2 comentarios
dpb
dpb el 26 de Jul. de 2022
What's rho?
John Gilmore
John Gilmore el 26 de Jul. de 2022
Please see my edit.

Iniciar sesión para comentar.

Respuestas (1)

David Hill
David Hill el 26 de Jul. de 2022
tic;
rho=rand(500000,1);n=9;m=3;
s=0:(n-m)/2;
numerator = (-1).^s .* factorial(n-s);
denominator = factorial(s).*factorial((n+m)/2-s).*factorial((n-m)/2-s);
Rnm=sum((numerator./denominator).*rho.^(n-2*s),2);
toc;
Elapsed time is 0.109334 seconds.
  4 comentarios
John Gilmore
John Gilmore el 27 de Jul. de 2022
While the script isn't running? Running that command shows nothing.
David Hill
David Hill el 27 de Jul. de 2022
tic;
rho=rand(500000,1);n=9;m=3;
f=factorial(0:n);%could do lookup table for factorials (might help speed slightly)
s=0:(n-m)/2;
numerator = (-1).^s .* f(n-s+1);
denominator = f(s+1).*f((n+m)/2-s+1).*f((n-m)/2-s+1);
Rnm=sum((numerator./denominator).*rho.^(n-2*s),2);
toc;
Elapsed time is 0.102554 seconds.

Iniciar sesión para comentar.

Categorías

Más información sobre Memory Usage en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by