Asked by MSH
on 7 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

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;

MSH
on 7 May 2015

But magic() command generates only square matrix. How i can get rectangular matrix with magic()?

Regards

Michael Haderlein
on 7 May 2015

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

MSH
on 21 May 2015

THANKS

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Stephen Cobeldick (view profile)

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/215556-matrices-with-customized-sum-for-rows-and-columns#comment_286943

Sign in to comment.