# Randomly generated row matrix B with constraints?

1 回表示 (過去 30 日間)
laurie 2015 年 2 月 25 日

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 件のコメント-1 件の古いコメントを表示-1 件の古いコメントを非表示
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 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 件のコメント1 件の古いコメントを表示1 件の古いコメントを非表示
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 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 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.
##### 1 件のコメント-1 件の古いコメントを表示-1 件の古いコメントを非表示
laurie 2015 年 2 月 25 日
Greig please see the code I've attached.

サインインしてコメントする。

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 Center および File ExchangeAnnotations についてさらに検索

### Community Treasure Hunt

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

Start Hunting!

Translated by