2016-02-06 1 views
0

Essayer d'ajouter à une matrice dans une boucle for en diagonale:Construire Diagonal en boucle

for ii=1:10 
    R1 = [1,2;3,4]; Matrix is always 2x2 but different values each iteration 
    cov = blkdiag(R1); 
end 

Il est évident que cela ne fonctionnera pas depuis que je suis en train de réécrire sur la valeur. Je veux construire une matrice qui consiste en R1 des valeurs telles que ce

[ R1,0,0,0..., 
    0,R1,0,0...] 

je peux atteindre l'objectif final en utilisant d'autres techniques tout simplement curieux de savoir si cela peut se faire dans la boucle for

Répondre

-1
R1 = [1,2;3,4];        %// initial R1 matrix 
CurrentOut = R1;        %// initialise output 
for ii = 1:10 
    R1 = [1,2;3,4];       %// placeholder for function that generates R1 
    [A,B] = size(CurrentOut);    %// get current size 
    tmpout(A+2,B+2)=0;      %// extend current size 
    tmpout(1:A,1:B) = CurrentOut;   %// copy current matrix 
    tmpout(A+1:end,B+1:end) = R1;   %// add additional element 
    CurrentOut=tmpout;      %// update original 
end 

que vous dit, une boucle for n'est pas la meilleure façon de le faire, mais cela peut effectivement être fait.

2

Tant que nous sommes en boucle et en croissance des matrices, que diriez-vous?

for ii = 1:10 
    R1 = [1 2; 3 4]; %// placeholder for function that generates R1 
         %// move this line and next before loop if R1 is static 
    [m,n] = size(R1); 
    cov(end+1:end+m,end+1:end+n) = R1; 
end 
+1

@Adriaan Je suppose que l'affectation à 'R1' était juste un espace réservé pour une fonction qui en fait généré une matrice 2x2, mais si elle est la même valeur tout le temps alors oui, il doit être initialisé en dehors de la boucle . Je vais ajouter un commentaire de clarification au code. – beaker

+0

@Adriaan En fait, je ne l'ai pas supposé, je l'ai lu dans le commentaire dans le code OP. Je savais que je n'avais pas inventé ça. ;) – beaker

+0

oh oui, bon point. Je suppose que je devrais mettre à jour aussi bien alors – Adriaan