Как сделать неравномерные случайные числа?

 

Вопрос математикам. Как сделать генератор псевдослучайных чисел, с распределением как на графике. Из обычного rnd с равномерным распределением.
 

Как насчет уравнения вашей прямой + rnd() ? Еслы rnd() из интервала [0,1], то надо его еще проскалировать на тот интервал, который вас интересует.

 
Точно уравнение, не могу сказать. Это график распределения суточных колебаний курса. Как видно, получается прямая линия в логарифмическом масштабе. Не обязательно, чтобы было точное совпадение по числам, главное чтобы распределение выглядело как пряма в логарифмическом масштабе.
 
voidpiligrim >>:

Не знаю, почему, но в теме чувствуется что-то разумное.
Посмотрите здесь. Думаю, поможет.

 
Спасибо! Вечером проверю.
 
voidpiligrim >>:
Вопрос математикам. Как сделать генератор псевдослучайных чисел, с распределением как на графике. Из обычного rnd с равномерным распределением.


Универсальный (и единственный) метод генерации (псевдо)случайной последовательности А с заранее заданным распределением таков:
1. генерируем последовательность В с равномерным распределением в диапазоне, равном необходимой области значений А: в вашем случае от 1 до где-то 200 для красной линии и чуть меньше для синей (точные значения уточните сами).
2. если необходимое распределение А задается функцией y=f(x), то сначала нужно найти обратную к ней функцию x=g(y)=f^(-1)(x) и применить ее к последовательности, полученной на шаге 1.
3. если обратная функция g(y) неоднозначна, то есть для данного y существует несколько значений x1, x2, x3,... (как например для синей линии на вашем рисунке) то выбор одного из них осуществляется случайным образом с равными вероятностями.
 


alsu, всё сделал по Вашему рецепту.
1 - исходная функция (верхний график) Y=10^(2-2*X)
2 - обратная X=-(LOG10(Y)-2)/2
Нижний график - получившееся распределение на 100000 экспериментах. В принципе похожи, но как-то нижний график приподнят
 
конечно. вы же считаете количество событий, а не их частоту. Поделите и там, и там на количество экспериментов, и графики совпадут. Это называется условием нормировки - определенный интеграл от плотности распределения вероятностей случайной величины (в дискретном случае - сумма вероятностей по всем значениям x) - должен быть равен 1.
 
то есть должно быть не Y=10^(2-2*X), а Y=С*10^(2-2*X), где коэффициент С находится из вышеозначенного условия нормировки.
 


Понял. Поделил только не на количество экспериментов, а на количество выпавших чисел в первой группе, получилось вроде.
Спасибо!
 



getch, сравнил Ваше распределение (синий график), и своё (красный).

Причина обращения: