How do I update a matrix in for loop (indexing problem)
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello,
I have a matrix A and a vector u. I want to run a for loop to update the vector u. The operation is easy, I will multiple A by u (result is another vector denoted by z). Pick the largest element in z (result is scalar denoted by m). Update u by dividing the vector z with m. I don't know how to index the matrix so I used cell notation but that might not be correct.
     A=[1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
     u= ones (4,1);
     for s=1:10
         z{s}= A*u{s};
         m(s)= max(z{s});
         u{s} = z{s}/m(s);
    end
Any suggestions would be very helpful.
0 Commenti
Risposte (1)
  Guillaume
      
      
 il 20 Ago 2015
        
      Modificato: Guillaume
      
      
 il 20 Ago 2015
  
      If you don't want to keep around the result of each step, then your algorithm is simply:
A = [1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
u = ones (4,1);
for s = 1:10
   z = A * u;
   m = max(z);
   u = z / m;
end
If you do want to keep the intermediary results, then you can indeed use cell arrays, like this:
    A = [1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
    uinitial = ones (4,1);
    numsteps = 10;
    u = cell(1, numsteps+1); z = cell(1, numsteps); m = cell(1, numsteps);
    u{1} = uinitial;
    for s = 1:numsteps
       z{s} = A * u{s};
       m{s} = max(z{s});
       u{s+1} = z{s} / m{s};
    end
Or you could use arrays which will be easier to inspect
    A = [1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
    uinitial = ones (4,1);
    numsteps = 10;
    u = zeros(4, numsteps+1); z = zeros(1, numsteps); m = zeros(1, numsteps);
    u(:, 1) = uinitial;
    for s = 1:numsteps
       z(s) = A * u(:, s);
       m(s) = max(z(s));
       u(:, s+1) = z(s) / m(s);
    end
0 Commenti
Vedere anche
Categorie
				Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
