Randomly generated row matrix B with constraints?

1 Ansicht (letzte 30 Tage)
laurie
laurie am 25 Feb. 2015
Beantwortet: Roger Stafford am 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 Kommentar
laurie
laurie am 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.

Melden Sie sich an, um zu kommentieren.

Antworten (3)

Roger Stafford
Roger Stafford am 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 Kommentare
Roger Stafford
Roger Stafford am 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 am 25 Feb. 2015
Bearbeitet: laurie am 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.

Melden Sie sich an, um zu kommentieren.


Greig
Greig am 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 am 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)));

Kategorien

Mehr zu Performance and Memory finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by