Vous essayez d'effectuer la version cummulative de mpower
avec un vecteur de valeurs k
.
Malheureusement, bsxfun
n'a pas encore évolué pour gérer un tel cas. Donc, le mieux que je pourrais suggérer à ce stade serait d'avoir un stockage en cours qui accumule le produit matriciel à chaque itération pour être utilisé au suivant.
Votre code de boucle d'origine avait l'air quelque chose comme ça -
final = zeros([size(A),100]);
for j=1:1:100
final(:,:,j)=A^(j-1);
end
Ainsi, avec la suggestion, le code Loopy modifié serait -
final = zeros([size(A),100]);
matprod = A^0;
final(:,:,1) = matprod;
for j=2:1:100
matprod = A*matprod;
final(:,:,j)= matprod;
end
Analyse comparative -
%// Input
A = randi(9,200,200);
disp('---------- Original loop code -----------------')
tic
final = zeros([size(A),100]);
for j=1:1:100
final(:,:,j)=A^(j-1);
end
toc
disp('---------- Modified loop code -----------------')
tic
final2 = zeros([size(A),100]);
matprod = A^0;
final2(:,:,1) = matprod;
for j=2:1:100
matprod = A*matprod;
final2(:,:,j)= matprod;
end
toc
runtimes -
---------- Original loop code -----------------
Elapsed time is 1.255266 seconds.
---------- Modified loop code -----------------
Elapsed time is 0.205227 seconds.
Merci beaucoup pour la réponse rapide. Cela donne un pouvoir élément-sage de la matrice. Je cherche la puissance de la matrice. c'est A^k et non A.^k. J'espère que je suis clair avec ma question. Merci encore! – imtl
@imtl Où 'k' serait un droit scalaire? – Divakar
Ok. Je vais essayer à nouveau d'expliquer mieux. k est un vecteur de 0: 1: m (m = 100 par exemple). Je voudrais obtenir les m puissances d'une matrice A (nxn). C'est un multiarray de [A^0 A^1 A^2 .... A^m]. Dans l'ensemble, m matrices. Ou un tableau nxnxm. J'espère que je suis plus clair maintenant. Désolé pour la confusion. – imtl