Clear Filters
Clear Filters

How can I generate a random vector between 1-9 with 10 numbers and at least one number should be >2.

3 views (last 30 days)
X=rand(10,1)*(9-1)+1 How should I change this code to make at least one number >2.

Accepted Answer

John D'Errico
John D'Errico on 21 Dec 2014
Edited: John D'Errico on 21 Dec 2014
Generate 9 (NINE) random numbers with no constraint from 1:9. Then generate a 10th number that is assuredly greater than 2. Randomly permute the set.
R = [ceil(rand(1,9)*9), ceil(rand*7 + 2)];
R = R(randperm(10));
Easy peasy. If you prefer to use randi, it is just as easy, and perhaps easier to read.
R = [randi([1 9],[1 9]), randi([3,9],1)];
R = R(randperm(10));
The general idea is a common one to be found in probability. If you need one number to have some property, then generate it as such.
Edit: to generate real numbers instead of integers...
R = [rand([1 9])*8 + 1, rand(1)*7 + 2];
R = R(randperm(10));
The basic idea remains the same. Note that the rand function generates a value in the strict open interval (0,1), so the result of our 10th number will never be exactly 2. Thus, that value must always be strictly greater than 2.
  3 Comments
John D'Errico
John D'Errico on 21 Dec 2014
Edited: John D'Errico on 21 Dec 2014
Sorry. I presumed (incorrectly) that your numbers be integers given a too fast reading of your question. Even so, it is trivial to change to generate real numbers as I show in the edit.

Sign in to comment.

More Answers (2)

Matt J
Matt J on 21 Dec 2014
Edited: Matt J on 21 Dec 2014
One way,
X=rand(10,1)*(8-1)+1 +ceil(rand(10,1))

Azzi Abdelmalek
Azzi Abdelmalek on 21 Dec 2014
X=rand(10,1)*8+1;
idx=X>2;
if nnz(idx)==0
X(randi(numel(X)))=7*rand+2;
end

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

No tags entered yet.

Community Treasure Hunt

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

Start Hunting!