MATLAB: Créer une matrice diagonale de bloc avec le même bloc répétitif
J'ai une matrice K de dimensions n x n. Je veux créer un nouveau bloc diagonal de la matrice M de dimensions N x Nde sorte qu'elle contient d blocs de la matrice K que sa diagonale.
J'aurais utilisé directement M = blkdiag(K,K,K) etc. a d de plus en plus petits. Malheureusement, d est très grand et je ne veux pas écrire manuellement la formule avec d exactement les mêmes arguments pour le blkdiag() fonction.
Est-il plus court, plus intelligente façon de le faire?
source d'informationauteur steadyfish
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser
kron
.renvoie la de Kronecker tenseur produit de X et de Y. Le résultat est un grand ensemble formé par la prise de tous les produits possibles entre les éléments de X et celles de Y. Si X est m-par-n et Y est p par q, puis kron(X,Y) est m*p-par-n*q. Si dans votre cas, quelque chose comme cela va faire:
avec
L
le nombre de blocs.La suivante devrait fonctionner:
d=5; K=eye(3); T = cellule(1,d);
pour j=1:d
T{j} =K;
fin
M = blkdiag(T{:})
Vous ne devriez jamais utiliser la fonction eval, ou aller dans des boucles for inutilement.
Kron est un moyen très élégant.
Je voulais juste partager ce que cela marche aussi.
Il peut être plus rapide que l'utilisation kron-eye.
Une boucle "for" peut pourrait aider. Comme: