filling a matrix with a loop
    6 views (last 30 days)
  
       Show older comments
    
Hi community, 
I want to create a large matrix 400x400, In this matrix I want it to have the form
A= [1 1 0 1 000000000000000000........;0 1 1 0 1 00000000000000......; 0 0 1 1 0 1 00000000000000000] and so on till it is a 400x400 matrix.
I could not find a way yet to easiliy do this. As doing this manually is way too much work. 
Does anyone know how to do this?
2 Comments
Accepted Answer
  Stephen23
      
      
 on 14 May 2019
        
      Edited: Stephen23
      
      
 on 14 May 2019
  
      "Does anyone know how to do this?"
>> C = [1,zeros(1,399)];
>> R = [1,1,0,1,zeros(1,396)];
>> M = toeplitz(C,R);
>> size(M)
ans =
   400   400
>> M(1:9,1:20) % first rows and columns
ans =
   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0
>> M(392:400,381:400) % last rows and columns
ans =
   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
4 Comments
  Stephen23
      
      
 on 16 May 2019
				
      Edited: Stephen23
      
      
 on 16 May 2019
  
			C = {[1,0;1,1;0,1;1,0]};
M = blkdiag(C{ones(1,200)});
Checking:
>> size(M)
ans =
   800   400
>> M(1:12,1:16)
ans =
   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0
More Answers (3)
  Alex Mcaulley
      
 on 14 May 2019
        A = repmat([1 1 0 1 zeros(1,396)],400,1);
A = cell2mat(arrayfun(@(i) circshift(A(i,:),i-1) , 1:size(A,1), 'UniformOutput',false)');
0 Comments
  Jos (10584)
      
      
 on 14 May 2019
        % clever indexing trick
A= [1 1 0 1]
N = 10 ; % smaller example! 400 in your case
X = triu(toeplitz(1:N)) ;
X(X > numel(A)) = 0 ;
tf = X > 0 ;
X(tf) = A(X(tf))
0 Comments
  Andrei Bobrov
      
      
 on 15 May 2019
        
      Edited: Andrei Bobrov
      
      
 on 15 May 2019
  
      out = full(spdiags(ones(400,3),[0,1,3],400,400));
0 Comments
See Also
Categories
				Find more on Creating and Concatenating Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




