Прежде чем вы сможете создать генератор случайных чисел, вам нужно указать распределение, из которого он должен получать. Вы только частично сделали это: то есть, вы указали, что оно рисует из целых чисел в [1,9], и что у него есть значение, которое вы хотите иметь возможность указывать. Это все еще оставляет бесконечность распределений на выбор. Какие еще свойства вы хотите иметь в вашем дистрибутиве?
Редактировать следующий комментарий: Среднее значение любой конечной выборки из распределения вероятностей - так называемое среднее значение выборки - будет только приближаться к среднему значению распределения. Обойти это невозможно.
При этом самым простым (в смысле максимальной энтропии) распределением по целым числам в области [1,9] является экспоненциальное распределение: то есть
p = @(n,x)(exp(-x*n)./sum(exp(-x*(1:9))));
Параметр x
определяет среднее значение распределения. Соответствующее совокупное распределение составляет
c = cumsum(p(1:9,x));
Чтобы извлечь из распределения p
, вы можете нарисовать случайное число из [0,1] и найти, в какой подинтервал c
оно попадает: то есть,
samp = arrayfun(@(y)find(y<c,1),rand(n,m));
вернет массив целых чисел [n,m]
, извлеченный из p
.