I want to create a random matrix?

Help me!
I want to create a random matrix HM (3,5), it satisfies the following conditions:
1. The value of HM is a nonnegative integer from 0 to 4.
2. The total value of the elements in a row is less than or equal to 5.
Thank you very much!

3 comentarios

Wayne King
Wayne King el 29 de Dic. de 2013
Editada: Wayne King el 29 de Dic. de 2013
0 is not a positive integer. And why a nonnegative integer from 0 to 4? How can you select a 4 and possibly get a sum less than or equal to 3?
Pham
Pham el 29 de Dic. de 2013
Ok, sorry. a nonnegative integer from 0 to 4 with the total value of the elements in a row is less than or equal to 6.
Pham
Pham el 29 de Dic. de 2013
you can help me

Iniciar sesión para comentar.

 Respuesta aceptada

Amit
Amit el 29 de Dic. de 2013

0 votos

okay .. an approach would be rejection method .. be careful .. for extremely large matrix this will be a bad idea .. tmp1= randi([0 c],a*100,b); tmp1=tmp1(sum(tmp1,2)<=d); HM=tmp1(1:a,:);

6 comentarios

Amit
Amit el 29 de Dic. de 2013
the idea here is to create a large matrix(that's why 100*a) and the reject the values which don't qualify the conditions ..
Pham
Pham el 29 de Dic. de 2013
When I for example: a = 5, b = 8, c = 4, d = 8, the matrix size is HM (5,1)?
Amit
Amit el 29 de Dic. de 2013
you can also use while loop as well for rejection method, but that will be slower..
Amit
Amit el 29 de Dic. de 2013
correction: tmp1=tmp1(sum(tmp1,2)<=d,:)
Pham
Pham el 29 de Dic. de 2013
OK. Thanh you very much!
Pham
Pham el 30 de Dic. de 2013
Hello
The code above has the following disadvantages: When b is large and d is small, the matrix tmp1 to satisfy the conditions will be the number of rows <a. So HM matrix will fail. For example:
tmp1= randi([0 3],5*10000,50);
tmp1=tmp1(sum(tmp1,2)<=10,:);
HM=tmp1(1:5,:)
It will error: Index exceeds matrix dimensions.
Are you using the loop, you can just help me. Thanks.

Iniciar sesión para comentar.

Más respuestas (1)

Amit
Amit el 29 de Dic. de 2013

0 votos

write down all possible ways to get 3 or less than 3 using integers 0-4 like [1 0 0 0 0] [1 1 0 0 0] etc.... pick one of the matrix for each row (randomly) and then use randperm to reorder them.

13 comentarios

Amit
Amit el 29 de Dic. de 2013
Editada: Amit el 29 de Dic. de 2013
lets say you get 20 possible matrixes stored in comb(20,5) then:
temp1 = randi (20,10,1); HM=comb(temp1,:); for I=1:10 HM(I,:)=HM(I,randperm(5)); end
Sorry, I couldn't change it to code tags as I was replying from phone.
Pham
Pham el 29 de Dic. de 2013
You can write a script to perform this matrix with a nonnegative integer from 0 to 4 with the total value of the elements in a row is less than or equal to 6.
Pham
Pham el 29 de Dic. de 2013
Undefined variable comb.
Error in Untitled2 (line 2)
HM=comb(temp1,:);
Amit
Amit el 29 de Dic. de 2013
Editada: Amit el 29 de Dic. de 2013
comb is the matrix you'll make. comb in your case will be [1 0 0 0 0; 1 1 0 0 0; 1 1 1 0 0;2 0 0 0 0; 2 1 0 0 0;3 0 0 0 0]
Pham
Pham el 29 de Dic. de 2013
Thank you, but it looks like this is complex and crafts. You can just give me the brief command to create this matrix.
Amit
Amit el 29 de Dic. de 2013
Editada: Amit el 29 de Dic. de 2013
the final code for your case:
comb=[1 0 0 0 0;1 1 0 0 0;1 1 1 0 0;2 0 0 0 0;2 1 0 0 0;3 0 0 0 0]; temp1 = randi (6,10,1); HM=comb(temp1,:); for I=1:10 HM(I,:)=HM(I,randperm(5)); end
Pham
Pham el 29 de Dic. de 2013
You have way without using comb because the matrix HM large size, you can not list all cases of comb.
Amit
Amit el 29 de Dic. de 2013
you changed the question from original post and how is 3×5 matrix matrix huge? and to make comb matrix, just make a code based on how you'll do it if you were suppose to do this on paper.
Pham
Pham el 29 de Dic. de 2013
Because the matrix in my program HM large size. I just gave an example of a small matrix HM with such constraints.
Amit
Amit el 29 de Dic. de 2013
Then can you state your real problem please?
Pham
Pham el 29 de Dic. de 2013
Editada: Pham el 29 de Dic. de 2013
I want to create a random matrix HM (a,b), it satisfies the following conditions:
1. The value of HM is a nonnegative integer from 0 to c.
2. The total value of the elements in a row is less than or equal to d.
Above example is only one case.
Can you help me. Thank you very much!
Amit
Amit el 29 de Dic. de 2013
does b, c and d have any correlation? like in the example case, you have b=c+1, d=c+1
Pham
Pham el 29 de Dic. de 2013
b, c and d are any integers

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 29 de Dic. de 2013

Comentada:

el 30 de Dic. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by