## How to dynamically update the matrix ?

### Ahsan Abbas (view profile)

on 8 May 2016
Latest activity Commented on by Ahsan Abbas

on 8 May 2016

### Weird Rando (view profile)

Hello Guys,
I have to generate matrix A=[-1 0 c1; 0 -1 c2] dynamically, for example if c1=[1 1 2 2] & c2=[3 3 4 4] are 1d arrays and if its length change after every execution of loop then the output of matrix A will increase automatically after increase in length of c1 & c2 arrays, for example in case of above example the output of A will be like...
A = [-1 0 1;
0 -1 3;
-1 0 1;
0 -1 3;
-1 0 2;
0 -1 4;
-1 0 2;
0 -1 4;]
How do i write this type of matrix dynamically ?

### Weird Rando (view profile)

on 8 May 2016
Edited by Weird Rando

### Weird Rando (view profile)

on 8 May 2016

This only works if c1 and c2 have the same length
A = [];
c1=[1 1 2 2];
c2=[3 3 4 4];
nloop = length(c1);
for ii = 1:nloop
A=[A;-1 0 c1(ii); 0 -1 c2(ii)]
end

Show 1 older comment
Ced

### Ced (view profile)

on 8 May 2016
You can transform c1 and c2 into matrices before concatenation. There is no need for the for loop.
A = [ 1 2 ; 3 4];
c1 = {1,1,2,2};
c2 = {3,3,4,4};
c1_num = cell2mat(c1);
c2_num = cell2mat(c2);
A = horzcat(A,[c1_num; c2_num]);
or, directly
A = [ 1 2 ; 3 4];
c1 = {1,1,2,2};
c2 = {3,3,4,4};
A = [ A cell2mat([c1 ; c2]) ]
Note that c1_num and c2_num must have the same number of columns, and their total number of rows should equal the number of rows of A. Also, the cells must only contain numerical scalars, but I suppose that's fairly obvious.
Image Analyst

### Image Analyst (view profile)

on 8 May 2016
There is also no need, that you've shown so far, for a cell array. A simple numerical array would be much simpler and easier.
Ahsan Abbas

### Ahsan Abbas (view profile)

on 8 May 2016
Thank you Ced & Image Analyst for your responses, specially for cell2mat.