Randomly generated row matrix B with constraints?

1 次查看(过去 30 天)
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 个评论
laurie
laurie 2015-2-25
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.

请先登录,再进行评论。

回答(3 个)

Roger Stafford
Roger Stafford 2015-2-25
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 个评论
Roger Stafford
Roger Stafford 2015-2-25
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 2015-2-25
编辑:laurie 2015-2-25
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.

请先登录,再进行评论。


Greig
Greig 2015-2-25
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 2015-2-25
I think this is what you want, Laurie, assuming A elements are all non-negative integers.
B = floor((A+1).*rand(size(A)));

类别

Help CenterFile Exchange 中查找有关 Performance and Memory 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by