Generationf of uniform random

2 vues (au cours des 30 derniers jours)
htet wai
htet wai le 10 Nov 2017
Commenté : htet wai le 11 Nov 2017
How can I generate the uniform random array with the constraint of second value not changing more than 20% of the first value
for example (0.5 0.45 0.54 0.63 0.52...........) The difference between first random to second random should be within 20% of first value and the overall random should in uniform manner.
Thank You.
  3 commentaires
Walter Roberson
Walter Roberson le 10 Nov 2017
The values after the first are all to be within 20% of the first? Or the values after the first each have to be within 20% of the immediately proceeding value?
htet wai
htet wai le 10 Nov 2017
I want to generate 1000 random where random(i+1) is greater or less than x% (0-20%) of random(i). but all the 1000 random should be within uniformly distributed.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 10 Nov 2017
V = zeros(1,100);
V(1) = rand;
for K = 2 : 100; V(K) = V(K-1) + (rand() * 2 - 1) * V(K-1) * .2; end
  5 commentaires
Walter Roberson
Walter Roberson le 11 Nov 2017
Suppose we remove the restriction that the maximum value can be 1. Suppose we simplify the model by alternately adding and subtracting the full 20%, a simple up/down randomness. Then each time we subtract 20% the previous value would be multiplied by 4/5, and each time we add 20% the previous value would be multiplied by 6/5. In this simplified model, those occur in pairs, so each pair would give 4/5 * 6/5 = 24/25 times the result of the previous pair. As you continue this, the end result is going to be (24/25)^n which for large n, the result is clearly going to tend to 0.
htet wai
htet wai le 11 Nov 2017
Thank you for your answer and I understand your point.
Is it possible to generate the uniform random where the changes between each random term is +/-0.2 (instead of 20% of the first value)?

Connectez-vous pour commenter.

Plus de réponses (1)

Kaushik Lakshminarasimhan
Kaushik Lakshminarasimhan le 10 Nov 2017
Modifié(e) : Kaushik Lakshminarasimhan le 10 Nov 2017
This should work:
N=10; % number of random numbers
success = false;
while ~success
x = rand(N,1);
[minval,minindx] = min(abs(x(2:end) - x(1)));
if minval < 0.2*x(1)
x([2 minindx+1]) = x([minindx+1 2]);
success = true;
end
end
disp(x);
Note that as Star Strider pointed out the sequence will no longer be random.

Catégories

En savoir plus sur Random Number Generation dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by