не ясно, какая у вас переменная, но я предполагаю, что это r
.
Самый простой способ сделать это, как заметил Крис, сначала получить cdf (обратите внимание, что если r начинается с 0, pdf(1)
равно Nan ... измените его на 0
):
cdf = cumtrapz(pdf);
cdf = cdf / cdf(end);
затем создает равномерное распределение (size_dist, указывающее количество элементов):
y = rand (size_dist,1);
, за которым следует метод для распространения по cdf. Любая техника будет работать, но здесь самый простой (хотя и не элегантный)
x = zeros(size_dist,1);
for i = 1:size_dist
x(i) = find( y(i)<= cdf,1);
end
и, наконец, возвращаемся к исходному pdf. Используйте числовое индексирование Matlab, чтобы изменить курс. Примечание: используйте r
, а не pdf
:
pdfHist = r(x);
hist (pdfHist,50)