How to speed up function evaluation by vectorization
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Frederik Lohof
el 7 de Oct. de 2015
Editada: Frederik Lohof
el 7 de Oct. de 2015
Is there a way to speed up this code significantly? Maybe by more vectorization?
It is the evaluation of a Hesse matrix. The first loop is a "dot product" between basis elements in the form of 16x16 matrices (Lambda) and corresponding coefficients (T). The second (double-) loop is the evaluation of the Hesse matrix itself.
This is a more generic version of the code:
Hesse=eye(256,256);
B=rand(1296,256);
T=rand(256,1);
Lambda=rand(16,16,256);
f=rand(1296,1);
P_int=B*T;
rho_int=zeros(16);
%Loop 1
for j=1:256
rho_int=rho_int+T(j,1)*Lambda(:,:,j)/2^4;
end
rho_int_inv=inv(rho_int);
%Loop 2
for k=2:256
for l=2:256
Hesse(k,l)=dot(f, (B(:,k).*B(:,l))./(P_int.^2))+trace(rho_int_inv*Lambda(:,:,k)*rho_int_inv*Lambda(:,:,l)/4^4);
end
end
2 comentarios
Respuesta aceptada
Kirby Fears
el 7 de Oct. de 2015
Editada: Kirby Fears
el 7 de Oct. de 2015
The second loop seems fine. Vectorization of loop 1 below.
% rho_int=zeros(16);
% Loop 1 replaced by vector operation
rho_int=sum(repmat(reshape(T,1,1,numel(T)),...
size(Lambda,1),size(Lambda,2)).*Lambda,3)/2^4;
rho_int_inv=inv(rho_int);
You could speed up the second loop with the parallel computing toolbox.
Hope this helps.
Más respuestas (0)
Ver también
Categorías
Más información sobre Quantum Mechanics en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!