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
Weird Rando 2016년 5월 8일
편집: Weird Rando 2016년 5월 8일

0 개 추천

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

댓글 수: 4

Thank you Scott for your answer, but i have the c1 & c2 in cell format, like c1{1}=1, c1{2}=1... and c2{1}=3, c2{2}=3... its making the matrix A in cell format like this
A =
[-1] [ 0] [1]
[ 0] [-1] [3]
how can i solve this problem ? Thanks
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 2016년 5월 8일
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 2016년 5월 8일
Thank you Ced & Image Analyst for your responses, specially for cell2mat.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

질문:

2016년 5월 8일

댓글:

2016년 5월 8일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by