MATLAB Answers

MSH
0

MATRICES with customized sum for rows and columns

Asked by MSH
on 7 May 2015
Latest activity Commented on by Stephen Cobeldick on 21 May 2015
I want to create 4 matrices (6x10) with sums of rows and columns as following; in a single program/code.
mat1: sum_row1=sum_row2=......=sum_row6=r(say) sum_col1=sum_col2=......=sum_col6=c(say)&&&&&&& r=c
mat2: sum_row1=sum_row2=......=sum_row sum_col1≠sum_col2≠......≠sum_col6
mat3: sum_row1≠sum_row2≠......≠sum_row6 sum_col1=sum_col2=......=sum_col6
mat4: sum_row1≠sum_row2≠......≠sum_row6 sum_col1≠sum_col2≠......≠sum_col6
Kindly suggest some logic/program
Thanks

1 Answer

Answer by Michael Haderlein on 7 May 2015
Edited by Michael Haderlein on 7 May 2015
 Accepted Answer

To get mat1, you can use the magic function:
>> mat1=magic(4)
mat1 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> sum(mat1,1)
ans =
34 34 34 34
>> sum(mat1,2)
ans =
34
34
34
34
mat2, mat3 and mat4 are easy, for instance use randoms and normalize the columns/rows:
>> matrand=rand(4);
>> mat2=bsxfun(@rdivide,matrand,sum(matrand));
>> sum(mat2)
ans =
1 1 1 1
>> mat3=bsxfun(@rdivide,matrand,sum(matrand,2));
>> sum(mat3,2)
ans =
1.0000
1.0000
1.0000
1.0000
mat4=matrand;

  3 Comments

But magic() command generates only square matrix. How i can get rectangular matrix with magic()?
Regards
Oh, sorry, I didn't read that you need 6x10 matrices. However I'm confident that in this case mat1 only exists if all the sums are zero. If this is fine with you, create the matrix with
>> matrand=randi(100,5,9);
>> mat1=[matrand -sum(matrand,2);-sum(matrand,1) sum(matrand(:))];
>> sum(mat1,1)
ans =
0 0 0 0 0 0 0 0 0 0
>> sum(mat1,2)
ans =
0
0
0
0
0
0
THANKS

Sign in to comment.