replacing for loop with more efficient code
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Lukas Müller
le 10 Jan 2019
Commenté : Anusha Sridharan
le 11 Jan 2019
Hi, given symmetric matrices für i=1,...,m, positiv definite and symmetric and ,
I want to compute with .
I solved this with the following for loop:
for i=1:m
M_row=X*A(:,(i-1)*n+1:i*n)*inv_S;
for j=i:m %since M is symmetric
M(i,j)=trace(M_row*A(:,(j-1)*n+1:j*n));
end
end
Is there a more efficient way to solve this in matlab? with vectorization?
2 commentaires
Bruno Luong
le 11 Jan 2019
OP wants to compute
M(i,j) = Trace(X * A(:,:,i) * inv(S) * A(:,:,j))
where A(:,:,i), X and S are n x n symmetric, matrices, S and X are definite positive. i=1,...m
His original code that needs to be optimized is
M = zeros(m,m);
inv_S = inv(S);
for i=1:m
M_row=X*A(:,(i-1)*n+1:i*n)*inv_S;
for j=i:m %since M is symmetric
M(i,j)=trace(M_row*A(:,(j-1)*n+1:j*n));
end
end
Réponse acceptée
Bruno Luong
le 10 Jan 2019
% Generate test matrices
m = 5;
n = 10;
S = rand(n,n);
S = 0.5*(S + S.');
X = rand(n,n);
X = 0.5*(X + X.');
A = zeros(n,n,m);
for k=1:m
Ak = rand(n,n);
Ak = 0.5*(Ak + Ak.');
A(:,:,k) = Ak;
end
AA = reshape(A,[n n m]);
M = zeros(m,m);
for i=1:m
Ti = S\(AA(:,:,i)*X);
M(i,:) = Ti(:).'*reshape(AA(:,:,:),[],m);
end
1 commentaire
Bruno Luong
le 11 Jan 2019
Plus de réponses (1)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!