Randomly generated row matrix B with constraints?

1 visualizzazione (ultimi 30 giorni)
laurie
laurie il 25 Feb 2015
Risposto: Roger Stafford il 25 Feb 2015
Matrix A which is generated based on a calculation A=[2 1 1 2]
I need:
Matrix B (B is equal to the size of A) needs to be randomly generated so that each of its entries (1,i) are no larger than the respective entries in Matrix A (1,i).
I also need a 0 to be a possible randomly generated number in Matrix B
Any help, much appreciated. I can not figure a way for randi to apply this constraint to the individual columns.
  1 Commento
laurie
laurie il 25 Feb 2015
for pop = 2:1:20
for ii = 1:1:4
A(ii) = ((Data.tend(1,pop-1)-Data.duration(1,pop-1)+1) - Data.tstart(1,pop-1)); %Matrix A
B(ii) = randi([0, A(ii)], 1); %Matrix B
chrom(ii) = Population(pop-1).chrom(pop-1) + B(ii);
end
Population(pop).chrom = int2str(chrom);
clear chrom
end
Does not stay within upper and lower bounds after 1st iteration.

Accedi per commentare.

Risposte (3)

Roger Stafford
Roger Stafford il 25 Feb 2015
I don't understand what you mean in the sentence "I also need a 0 to be a possible randomly generated number in Matrix B". For the other part try this:
B = A.*rand(size(A));
For each element in A, the corresponding element in B will lie somewhere between 0 and the A element value.
If you expect the elements of B to be integers, that is quite another matter.
  3 Commenti
Roger Stafford
Roger Stafford il 25 Feb 2015
Are you saying that the values in B should be integers? You should make that clear. The code I gave does not do that. Its values are almost all fractional. Also please be clear about what you expect the lower bounds in B values to be. Is it zero? Is it one? And finally what did you mean by the sentence I asked about?
laurie
laurie il 25 Feb 2015
Modificato: laurie il 25 Feb 2015
1.The values should be integers
2. The lower bounds of B should be 0 and the upper bound for B(1,i) should be A(1,i); where i is the columns.
3.As for the sentence you asked about, I was referring to the lower bounds. I was not very clear, sorry about that.

Accedi per commentare.


Greig
Greig il 25 Feb 2015
I guess this is what you are looking for?
for ii = 1:length(A)
B(ii) = randi([0, A(ii)], 1);
end
It is not so clear exactly what you are after, could you clarify a bit more please.

Roger Stafford
Roger Stafford il 25 Feb 2015
I think this is what you want, Laurie, assuming A elements are all non-negative integers.
B = floor((A+1).*rand(size(A)));

Community Treasure Hunt

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

Start Hunting!

Translated by